关于多线程:按顺序执行boost asio调用异步处理程序

Does boost asio call async handlers sequentially

如果我启动了一个asio计时器并在与主线程不同的线程上进行接收,这些处理程序是否可以同时运行?我假设没有,并且即使它们同时准备好了,单独的线程也会依次调用事件。要同时调用处理程序,asio必须创建自己的(第3个)线程,甚至中断一个处理程序以运行另一个处理程序。我找不到说明可能会顺序调用处理程序的文档,即使这似乎很可能。


如果多个线程正在为io_service的事件循环提供服务,例如调用io_service::run()的线程池,则处理程序可以同时执行。另一方面,如果只有一个线程为io_service提供服务,则可以确保回调处理程序不会同时运行,因为Boost.Asio保证回调处理程序只能在当前调用io_service::run*()的线程内执行。 Boost.Asio Timer.5-多线程程序教程中的同步处理程序可能会提供有关此主题的更多信息。