0

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

4

1 回答 1

1

asio 的核心是一个事件循环,它以对 的调用开始io_service::run(),这是一个阻塞调用。当您调用 时async_connect,您将连接操作排入io_services事件队列。要实现并行性,您必须创建一个线程池并让每个线程调用run()同一个io_service实例。

于 2012-06-03T01:53:02.110 回答