Сервер Сокета C++ - Не могущий насыщать ЦП

Я рекомендовал бы смотреть на SQL, который это производит. Можно просто распечатать str (запрос) для наблюдения его.

я не знаю об идеальном способе сделать его со стандартным SQL.

26
задан unixman83 20 February 2012 в 14:31
поделиться

4 ответа

boost :: asio не так удобен для потоков, как можно было бы надеяться - существует большая блокировка кода epoll в boost / asio / detail / epoll_reactor.hpp, что означает, что только один поток может вызывать системный вызов epoll ядра одновременно. И для очень маленьких запросов это имеет значение (то есть вы увидите только примерно однопоточную производительность).

Обратите внимание, что это ограничение того, как boost :: asio использует возможности ядра Linux, не обязательно само ядро ​​Linux . Системный вызов epoll действительно поддерживает несколько потоков при использовании событий, запускаемых фронтом, но получить его правильно (без чрезмерной блокировки) может быть довольно сложно.

Кстати, я проделал некоторую работу в этой области (объединяя полностью многопоточные пограничные функции). запустил цикл событий epoll с потоками / волокнами, запланированными пользователем) и сделал некоторый код доступным в рамках проекта nginetd .

44
ответ дан 28 November 2019 в 06:39
поделиться

Из ваших комментариев об использовании сети,
Похоже, у вас не так много движения в сети.

3 + 2,5 Мбайт / с примерно 50 Мбит / с балл-парк (по сравнению с вашим портом 1 Гбит / с).

Я бы сказал. у вас возникла одна из следующих двух проблем:

  1. Недостаточная рабочая нагрузка (низкая частота запросов от ваших клиентов)
    • Блокировка на сервере (генерация ответа о вмешательстве)

Просмотр примечаний cmeerw и данных об использовании ЦП
(на холостом ходу 50% + 20% + 0% + 0% )
скорее всего, это ограничение в реализации вашего сервера.
Я второй ответ cmeerw (+1).

3
ответ дан 28 November 2019 в 06:39
поделиться

Поскольку вы используете EC2, все ставки выкл.

Попробуйте использовать реальное оборудование, и тогда вы сможете увидеть, что происходит. Попытка провести тестирование производительности на виртуальных машинах в принципе невозможно.

Я еще не понял, для чего полезен EC2, если кто-то узнает, дайте мне знать.

11
ответ дан 28 November 2019 в 06:39
поделиться

230 запросов в секунду кажется очень низким для таких простых асинхронных запросов. Таким образом, использование нескольких потоков, вероятно, является преждевременной оптимизацией - заставьте его работать правильно и настроить в одном потоке и посмотрите, нужны ли они вам. Простое избавление от ненужных блокировок может ускорить работу.

В этой статье есть некоторые подробности и обсуждение стратегий ввода-вывода для производительности в стиле веб-сервера примерно в 2003 году. Кто-нибудь получил что-нибудь более свежее?

3
ответ дан 28 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: