![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем доброго дня.
читал исходники проекта p2engine, и обнаружил, что в проекте используется не один io_service и несколько рабочих потоков, а несколько io_service`ов, и, по идее, по одному потоку на io_service. но этого доказать не получилось, ибо реализацию метода __start(bool)(строка 137) я так и не нашел. интересует, какая _принципиальная_ разница между стандартным способом, и этим? и в каких случаях такой способ предпочтительней? спасибо. Это сообщение отредактировал(а) boostcoder - 26.4.2011, 13:04 |
|||
|
||||
| mabrarov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 12.1.2011 Где: Казань Репутация: 8 Всего: 9 |
Разница описана в примерах Boost.Asio, вроде бы. Утверждать на 100% не буду. Возможно, приводилась где-то в списке рассылки по Boost.Asio.
Вкратце, решение "io_service-per-worker-thread" хорошо тем (в отличие от thread-pool-over-one-io_service), что минимизирует конкурентый доступ к внутренностям io_service (и всего, что с ним связано, например, strand-ы). Однако, IMHO: 1) "внутренности io_service" итак написаны с расчетом на конкурентный доступ, т.е. это уже заложено в io_service изначально; 2) при работе с несколькоими io_service надо быть очень внимательным, если сущности, построенные на базе разных io_service, предполагается связывать каким-то видом общения (и тем более владения) - см. asio-samples echo_server - там 2 io_service и они создаются в определенном порядке (точнее должны уничтожаться в определенном порядке); 3) ну и мне больше импонирует вариант с несколькими пулами на базе io_service (разные пулы под разные классы/уровни задач - этакий конвейер) - см. asio-samples echo_server - за счет использования 2-х пулов (и 2-х io_service) уменьшается влияние выполнения одних задач на выполнение других задач (имеется в виду минимальное процессорное время, выделяемое задачам, при максимальной загрузке обоих пулов). |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
понял.
спасибо. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |