和线程池的区别是什么?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
它 "提供核心IO功能"。如果我只使用一个 asio::thread_pool
不加掩饰 io_context
?
一个线程池隐式地运行所有发布在它上面的任务(直到它被停止)。
一个io_service不会假设任何关于运行它的线程的事情:你需要确保你这样做,你可以自由决定是否在多个线程、一个线程、甚至是混合线程上运行它(比如一次一个线程,但从多个线程?
进一步的说明。
io_service
竞选成员(是否应该捕获boost::asio::io_service::run()抛出的异常?)io_service
可以重新启动(在一次 reset()
). asio::thread_pool
不多(见[搜索是 死机],相比之下 asio::io_service 和 thread_group 生命周期问题)asio::thread_pool
是 "不透明的":你无法控制它们是如何创建的。如果你需要为每个线程初始化一个第三方库,或者想使用Boost Thread与 interruption_point
s 等等。