Boost的documentation说:在致电io_service
之前,让boost::asio::io_service::run()
做一些工作是很重要的。但是,如果我要做一些工作并且我的io_service
对象运行方法正在运行到多个线程上会发生什么?我应该为每个线程提供1个工作,以防止其他人完成?或者我可以开始io在许多线程上运行并且只提供1项工作要做。我想提一下,我的问题中的“工作”一词并未提及io_service::work::work
。
答案 0 :(得分:6)
io_service
的工作状态不是由处理io_service
的线程数决定的。例如,如果io_service
有效,则通过io_service::run()
处理io_service
的所有线程将继续阻止处理事件循环,即使线程数量大于已发布工作量。因此,向io_service
添加单个工作操作是安全的,然后有许多线程处理io_service
。
总的来说,除非在io_service
构造函数中明确暗示并发性,否则io_service
不会区分由单个线程或多个线程处理的事件循环。如threads overview中所述,io_service
会将已加入其池的所有线程视为等效,以任意方式跨线程分配工作。