在多客户端进程中正确使用boost::asio

在多客户端进程中正确使用boost::asio,boost,asynchronous,parallel-processing,boost-asio,Boost,Asynchronous,Parallel Processing,Boost Asio,我第一次尝试使用boost::asio来编写一个进程,该进程连接到N台服务器并从中读取数据 我的问题是关于异步的工作方式。我的设计目标是并行地连接到所有服务器,并并行地从每个服务器读取数据。这应该通过async_connect和async_read完成,并调用io_service::run()N次,然后读取结果。问题是:为了实现并行性,从单个线程依次调用io_service::run()N次就足够了吗 请注意,这是asio的实现问题:具体来说,当调用connect_async和write_asy

我第一次尝试使用boost::asio来编写一个进程,该进程连接到N台服务器并从中读取数据

我的问题是关于异步的工作方式。我的设计目标是并行地连接到所有服务器,并并行地从每个服务器读取数据。这应该通过async_connect和async_read完成,并调用io_service::run()N次,然后读取结果。问题是:为了实现并行性,从单个线程依次调用io_service::run()N次就足够了吗

请注意,这是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调用何时返回,这将澄清我的问题。

asio的核心是一个事件循环,它从调用
io_service::run()开始,这是一个阻塞呼叫。调用
async\u connect
时,将连接操作排入
io\u services
事件队列。要实现并行性,您必须创建一个线程池,并让每个线程调用
run()
在同一
io\u服务
实例上。

不太确定这是否正确,也就是说,您可能不会从多个线程调用run(),但仍然可以通过操作系统机制(如i/O完成端口等)实现并行性。(不确定我的连接调用是否如此)-有人可以确认吗?在操作系统级别,它是并发的(),在应用程序级别,它是串行的。异步调用确实会立即返回,并将I/O操作延迟到操作系统,但您的完成处理程序将串行运行。另外,如果您在应用程序中只使用一个线程,则不应多次调用
io\u service::run
。很酷,这就是我的想法(也就是说,连接是并行的,而完成处理程序是串行的——显然,因为它们是从单个线程调用的)。为了回答上一个问题,您是对的,我实际上调用了
run\u one()
N次,而不是
run()
。谢谢!