Можно ли использовать отдельные потоки для чтения и записи с помощью Boost.Asio?
-
11-09-2019 - |
Вопрос
В соответствии с повышением Документация, имеющий вызов нескольких потоков io_service::run()
настраивает пул потоков, который служба ввода-вывода может использовать для выполнения асинхронных задач.В нем явно указано, что все потоки, присоединившиеся к пулу, считаются эквивалентными.
Означает ли это, что невозможно иметь отдельный поток для чтения из сокета и отдельный для записи?Если это возможно, как бы я это реализовал?
Решение
Любой поток, который вызывает io_service::run()
может использоваться для вызова асинхронных обработчиков.Но вы не можете конкретно указать, какой поток выполняет какой тип операции.Например, если вы вызываете io_service::run() в 2 фоновых потоках, и вы должны были вызвать socket::async_send
и socket::async_receive
в основном потоке ваши обработчики будут выполняться в любом фоновом потоке, который доступен в данный момент.Так что да, все потоки в принципе считаются эквивалентными и могут использоваться для любой асинхронной операции.