簡體   English   中英

boost :: asio內部線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM