Можно ли использовать отдельные потоки для чтения и записи с Boost.Asio? - PullRequest
3 голосов
/ 03 декабря 2009

Согласно документации Boost , вызов нескольких потоков io_service::run() устанавливает пул потоков, который служба IO может использовать для выполнения асинхронных задач. В нем прямо говорится, что все потоки, присоединившиеся к пулу, считаются эквивалентными.

Означает ли это, что невозможно иметь отдельный поток для чтения из сокета и отдельный для записи? Если это возможно, как бы я это реализовал?

1 Ответ

5 голосов
/ 03 декабря 2009

Любой поток, который вызывает io_service::run(), может использоваться для вызова асинхронных обработчиков. Но вы не можете конкретно указать, какой поток выполняет какой тип операции. Например, если вы вызываете io_service :: run () в 2 фоновых потоках и вам нужно было вызывать socket::async_send и socket::async_receive в основном потоке, ваши обработчики будут выполняться в любом фоновом потоке, который доступен в данный момент. Так что да, все потоки в основном считаются эквивалентными и могут использоваться для любой асинхронной операции.

...