从多个线程调用asio::thread_pool
函数的asio::io_context
和run()
之间有什么区别?是否可以将我的boost::thread_group
的调用io_context::run()
的线程替换为asio::thread_pool
?还是我需要在某个地方io_context
?
更新
当我使用asio::thread_pool
时,是否仍需要io_context
来使用套接字,计时器等? thread_pool
和io_context
都是asio::execution_context
。但是,文档在io_context
上说它“提供了核心I / O功能”。如果我仅使用asio::thread_pool
而没有使用io_context
,会丢失这些信息吗?
答案 0 :(得分:2)
隐式线程池运行所有发布在其上的任务(直到其停止)。
io_service对运行它的线程不做任何假设:您需要确保执行此操作,并且可以自由决定是否在多个线程,一个线程甚至是多个线程上运行它(就像是一次同时出现一个线程,但来自多个线程?)。
更多说明:
io_service
个运行/轮询成员(Should the exception thrown by boost::asio::io_service::run() be caught?)的异常io_service
可以重新启动(在reset()
之后)。 asio::thread_pool
没那么多(请参阅[搜索是dead atm],与asio::io_service and thread_group lifecycle issue进行比较)asio::thread_pool
控制的线程是“不透明的”:您无法控制它们的创建方式。如果您需要例如初始化每个线程的第三方库,或者要与interruption_point
s等一起使用Boost Thread。