Boost 的文档说:io_service
在调用boost::asio::io_service::run()
. 但是如果我做一些工作并且我的io_service
对象运行方法在多个线程上运行会发生什么?我应该给每个线程 1 个工作,以防止其他人完成吗?或者我可以在许多线程上开始 io 的运行并且只做 1 项工作。我想提一下,我的问题中的“工作”一词并不指io_service::work::work
.
问问题
4828 次
1 回答
6
的io_service
工作状态不是由处理的线程数量决定的io_service
。例如,如果一个io_service
有工作,所有处理io_service
通过的线程io_service::run()
将保持阻塞处理事件循环,即使线程的数量大于发布的工作量。因此,将单个工作操作添加到 中是安全的io_service
,然后让多个线程处理io_service
.
io_service
总体而言,除非在构造函数中特别提示并发性,否则io_service
不会区分其事件循环是由单个线程还是由多个线程处理的。如线程概述中所述,anio_service
会将所有已加入其池的线程视为等效的,以任意方式跨线程分配工作。
于 2013-08-05T16:30:28.627 回答