[英]Multiple threads and boost's io_service
Boost的文檔說:在調用boost::asio::io_service::run()
之前,給io_service
一些工作很重要。 但是,如果我要做一些工作並且我的io_service
對象運行方法正在多個線程上運行,會發生什么情況? 我應該為每個線程做1個工作,以防止其他人完成嗎? 或者,我可能會在許多線程上開始io的運行,並且只做一件工作。 我想提一提,我的問題中的“工作”一詞不涉及io_service::work::work
。
io_service
的工作狀態不是由處理io_service
的線程數量決定的。 例如,如果一個io_service
有工作,則所有通過io_service::run()
處理io_service
線程將保持阻塞狀態,以處理事件循環,即使線程數量大於已發布工作的數量。 因此,將單個工作操作添加到io_service
,然后讓許多線程處理io_service
是安全的。
總的來說,除非在io_service
構造函數中特別暗示了並發性,否則io_service
不會在由單個線程或多個線程處理的事件循環之間進行區分。 如線程概述中所述, io_service
將已加入其池的所有線程視為等效線程,以任意方式在線程之間分配工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.