今天查詢了很多關於多路復用之類的資料,特淺陋整理一下,有助於記憶。
其實這些概念都僅僅是實踐中的概念而已,沒必要理論是的加以定義,但也要是自己弄清楚,才能明確這些術語的應用場景。
1、同步和非同步i/o
弄清這些概念,先從reactor和proactor這兩個模式說起,網上的介紹很多,自己也沒有什麼時間仔細的分析、學習具體的模式內容和**,這裡只是講講他們的共同點和不同點。
共同點:依賴於event demultiplexer,i/o事件發生後都需要callback handler;
不同點:reactor callback handler說明i/o就緒,可以進行相關操作(read/write),由相關處理器來完成實際操作,這就是同步i/o
proactor callback handler說明i/o已經完成相關操作,處理器不需要再操心i/o的read或write了,這就是非同步i/o
2、明確了同步和非同步i/o如何劃分之後,然後要搞清楚什麼是 多路復用,這裡又涉及到阻塞和非阻塞等。
使用者應用程式/使用者程序
(2)阻塞和非阻塞是針對於程序在訪問資料的時候,根據io操作的就緒狀態來採取的不同方式,說白了是一種讀取或者寫入操作函式的實現方式,阻塞方式下讀取或者寫入函式將一直等待,而非阻塞方式下,讀取或者寫入函式會立即返回乙個狀態值。
阻塞式非阻塞式
(4)以下引自
i/o multiplexing (select and poll)
最常見的i/o復用模型,select。
(注:為什麼沒有輪詢呢?struct timeval *timeout是select的超時時間,這個引數至關重要,它可以使select處於三種狀態,第一,若將null以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視檔案描述符集合中某個檔案描述符發生變化為止;第二,若將時間值設為0秒0毫秒,就變成乙個純粹的非阻塞函式,不管檔案描述符是否有變化,都立刻返回繼續執行,檔案無變化返回0,有變化返回乙個正值;第三,timeout的值大於0,這就是等待的超時時間,即select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時後不管怎樣一定返回,返回值同上述。)
signal driven i/o (sigio)
只有unix系統支援,感興趣的課查閱相關資料
asynchronous i/o (the posix aio_functions)
很少有*nix系統支援,windows的iocp則是此模型
下面是以上五種模型的比較
非同步 非阻塞和IO多路復用總結
nginx是併發處理框架的代表者,很多後台業務都會放在nginx容器中執行,以實現高吞吐,而nginx能夠支援高併發也是由於使用了非同步非阻塞處理模型,本文將用通俗的話講解非同步 同步 阻塞 非阻塞的區別,以及io多路復用。一 同步和非同步 同步與非同步的重點是在訊息通知的方式上,也就是呼叫後結果通...
同步 非同步 阻塞和非阻塞
同步 非同步 阻塞和非阻塞 在進行windowsapi winsock 網路程式設計時,我們常常見到同步 非同步 阻塞和非阻塞四種呼叫方式。這些方式其實都可以擴充套件為廣義的概念,幫助我們理解多執行緒,多程序,實時作業系統等更廣的概念。同步 synchronic 所謂同步,就是在發出乙個功能呼叫時,...
同步 非同步 阻塞和非阻塞
在進行網路程式設計時,我們常常見到同步 非同步 阻塞和非阻塞四種呼叫方式。這些方式彼此概念並不好理解。所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步 非同步的時候,特指那些需...