Boost :: Asio Threadpool против дизайна io_service_per_cpu - PullRequest
7 голосов
/ 28 мая 2011

В настоящее время я не уверен, я пытаюсь сделать высокопроизводительный сервер, у меня есть 6Core CPU, поэтому, если бы я использовал дизайн "io_service_per_cpu", у меня было 6 io_service´s.

Я уже слышал, что дизайн потокового пула не самый лучший, но я не уверен в этом.

Какие у вас есть знания?Кто-то уже сделал Стресс-тест с каждым или что-то еще?

Ответы [ 2 ]

7 голосов
/ 28 мая 2011

По моему опыту, гораздо проще подходить к проектированию асинхронных приложений в следующем порядке:

  1. один поток и один io_service
  2. несколько потоков, каждый из которых вызывает io_service::run() с одного io_service.Используйте цепей для обработчиков, которым требуется доступ к разделяемым структурам данных.
  3. io_service на процессор

Необходимо выполнить мотивацию для переключения между каждой из этих конструкцийпосле профилирования вашего приложения.Обратите внимание, что пример HTTP Server 2 показывает только, как использовать io_service на процессор, но не показывает, когда и зачем использовать такой дизайн.

4 голосов
/ 28 мая 2011

Еще один хороший способ подойти к этому: запустить несколько копий вашего процесса и связать каждую из них с различным ядром, используя ваши ОС. Для FreeBSD используйте cpuset. ОС будет работать лучше, чем любой код пользователя. Затем вам нужно использовать внешний балансировщик нагрузки для распределения нагрузки между экземплярами вашего сервера. Дополнительные точки для привязки прерываний NIC к определенному ЦП.

...