和 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
?
最佳答案
线程池隐式运行所有发布在其上的任务(直到它停止)。
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等关于c++ - asio::io_context 和 asio::thread_pool 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61864490/