【发布时间】:2012-05-21 05:32:49
【问题描述】:
我第一次尝试使用 boost::asio 编写一个连接到 N 个服务器的进程从它们读取数据。
我的问题是关于异步的工作方式。我的设计目标是并行连接到所有服务器,并从每个服务器并行读取数据。这应该通过 async_connect 和 async_read 完成,并调用 io_service::run() N 次,然后读取结果。问题是:从单个线程依次调用 io_service::run() 是否足以实现并行性?
请注意,这是 asio 的实现问题:具体来说,当调用 connect_async 和 write_async 时,调用是否会在返回之前向操作系统发出开始连接/读取的信号,或者它只是将同步的连接/读取任务委托给工作线程并立即返回? - 从单个线程调用 io_service::run() 意味着串行执行任务的情况。
当然,我的猜测是前者,但我需要有人确认。我发现异步内容的文档(http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/overview/core/basics.html)没有提到 async_xxx 调用何时返回,这会澄清我的问题。
【问题讨论】:
标签: boost asynchronous parallel-processing boost-asio