2015-06-30 72 views
5

的影響,以下模式來自升壓ASIO文檔:什麼是調用io_service對象::運行方法兩次

enter image description here

我明白,如果我叫io_service::run方法兩次(在兩個獨立的線程),我將有兩個線程通過異步事件解複用器從完成事件隊列中取消事件對吧?

更確切地說,我的疑問是通過多次調用io_service::run方法來實現平行化。例如,當處理套接字時,例如,如果我在同一個io_service object上綁定了兩個套接字,每個調用socket.async_read_some方法的套接字調用io_service::run兩次時,是否涉及2個已註冊的回調(通過async_read_some方法)可以一致地調用。

+1

你理解正確。下面是有用的鏈接,詳細解釋它: http://theboostcpplibraries.com/boost.asio-scalability –

回答

4

你的假設是正確的。每個調用io_service::run()的線程將並行出隊並執行處理程序(簡單函數對象)。當然,如果你有多個提供io_service的事件來源(例如兩個套接字,一個套接字和一個定時器,多個同時調用等等),這當然是有意義的。

每次調用套接字的async_read()時,都會導致在io_service中正好排隊一個處理程序。只有其中一個線程會將其出列並執行。

小心不要每次調用async_read()多次一次每個插座

相關問題