我第一次尝试使用 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 调用何时返回,这会澄清我的问题。