[英]boost::asio internal threads
當使用boost :: asio進行一些異步TCP通信時,我注意到它啟動了很多(3-4)內部線程。 它說,閱讀文檔
"The implementation of this library for a particular platform may
make use of one or more internal threads to emulate asynchronicity"
現在我的lib有非常嚴格的要求,不能啟動任何額外的線程(除了客戶端提供的線程,現在啟動io_service::run()
)。 有沒有辦法阻止boost :: asio創建這些額外的線程?
或者,是否有任何其他異步庫可以只在一個線程中運行?
您可以通過在適當的轉換單元中定義BOOST_ASIO_DISABLE_THREADS
來禁用模擬的異步操作支持。 文檔中有關於定義的說法
顯式禁用Boost.Asio的線程支持,不管Boost作為一個整體是否支持線程。
如果您沒有找到特定於平台的實現說明 ,則會明確說明哪些操作使用此仿真。 例如,我知道幾乎每個平台都以這種方式模擬async_resolve()
,該線程是在第一次調用async_resolve()
。 一些(所有?)Windows平台模擬其他幾個操作,例如deadline_timer
操作。
禁用線程支持的一種替代方法可能是避免這些模擬操作。 我個人沒有在項目中使用BOOST_ASIO_DISABLE_THREADS
,所以我不確定它是否有其他副作用。
您是否實際對其進行了測試,以確定是否在您的特定平台上生成了線程? 如果沒有,問題就解決了! 如果有的話,你可以考慮使用像libevent或libev這樣的不同庫。 這些中的任何一個,或者像Qt這樣的各種庫提供的一大堆其他異步事件循環都可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.