2

Boost 的文档说:io_service在调用boost::asio::io_service::run(). 但是如果我做一些工作并且我的io_service对象运行方法在多个线程上运行会发生什么?我应该给每个线程 1 个工作,以防止其他人完成吗?或者我可以在许多线程上开始 io 的运行并且只做 1 项工作。我想提一下,我的问题中的“工作”一词并不指io_service::work::work.

4

1 回答 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 回答