如果我启动了一个asio计时器并在与主线程不同的线程上进行接收,这些处理程序是否可以同时运行?我假设没有,并且即使它们同时准备好了,单独的线程也会依次调用事件。要同时调用处理程序,asio必须创建自己的(第3个)线程,甚至中断一个处理程序以运行另一个处理程序。我找不到说明可能会顺序调用处理程序的文档。
最佳答案
如果多个线程正在为io_service
的事件循环提供服务,例如调用 io_service::run()
的线程池,则处理程序可以同时执行。另一方面,如果只有一个线程为io_service
服务,则可以确保回调处理程序不会同时运行,因为Boost.Asio保证回调处理程序只能在当前正在调用io_service::run*()
的线程内执行。 Boost.Asio Timer.5 - Synchronising handlers in multithreaded programs 教程可能会提供有关此主题的更多见解。
关于multithreading - Boost Asio是否按顺序调用异步处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066007/