2013-08-05 69 views
2

升壓的​​3210說:重要的是在致電boost::asio::io_service::run()之前給io_service做一些工作。但是如果我要做一些工作並且我的io_service對象運行方法正在多線程上運行,會發生什麼?我應該給每個線程1個工作,以防止其他人完成?或者我可以啓動io的許多線程運行,並只給1件工作。我想提一提,在我的問題中,'工作'這個詞不是指io_service::work::work多線程和升壓io_service

回答

5

io_service的工作狀態不是由處理io_service的線程數量決定的。例如,如果io_service已經工作,即使線程數量大於發佈的工作量,處理io_service通過io_service::run()的所有線程仍將阻止處理事件循環。因此,將單個工作操作添加到io_service是安全的,然後有許多線程處理io_service。總體而言,除非在io_service構造函數中明確暗示併發性,否則io_service不會區分由單個線程或多個線程處理的事件循環。如threads overview中所述,io_service將把所有加入其池的線程視爲等效線程,以任意方式在線程之間分配工作。