Boost.Asio 是不是可以使用单独的线程进行读写?

Posted

技术标签:

【中文标题】Boost.Asio 是不是可以使用单独的线程进行读写?【英文标题】:Is it possible to use separate threads for reading and writing with Boost.Asio?Boost.Asio 是否可以使用单独的线程进行读写? 【发布时间】:2009-12-03 05:17:41 【问题描述】:

根据 Boost Documentation,让多个线程调用 io_service::run() 设置了一个线程池,IO 服务可以使用该线程池来执行异步任务。它明确指出所有加入池的线程都被认为是等效的。

这是否意味着不可能有一个单独的线程用于从套接字读取和单独的线程用于写入?如果可能,我将如何实现?

【问题讨论】:

【参考方案1】:

任何调用io_service::run() 的线程都可以用来调用异步处理程序。但是你不能具体指定哪个线程执行哪种类型的操作。例如,如果您在 2 个后台线程中调用 io_service::run(),并且您要在主线程中调用 socket::async_sendsocket::async_receive,则您的处理程序将在当前可用的任何后台线程中执行。所以是的,所有线程基本上都被认为是等效的,并且可以用于任何异步操作。

【讨论】:

以上是关于Boost.Asio 是不是可以使用单独的线程进行读写?的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Asio 异步 TCP 客户端和多线程

对于带有单个接受器的线程 boost::asio 服务器,我们是不是需要每个线程多个 io_service

使用boost asio的线程池

boost::asio::socket 线程安全

Boost asio——读写同时进行

将 Boost.Log 与 Boost.Asio 服务一起使用