1.阻塞i/o模型與非阻塞i/o模型
阻塞與非阻塞的模型主要區別是:阻塞i/o模型中使用者程序在能讀取資料之前會進入睡眠或者掛起狀態;而非阻塞情況下遇到讀取資料失敗時核心直接返回錯誤訊號,使用者程序便在成功返回資料之前一直在呼叫recv操作詢問資料可讀性,因此這種情況也成為輪詢機制。
這兩種過程就好比如:一位大伯住在某一棟樓,一樓有他的郵箱,他可以選擇兩種方式去取他的郵件,一種是跑到一樓去等他的郵件,直到有郵件來了他才跑回自己的住房;一種是跑到一樓後發現沒有新郵件,他便跑回自己的住房,然後又跑下來看有沒有新郵件,沒有的話又跑回去…如此反覆的爬上爬下直到有新的郵件來為止。前者是阻塞模型,後者對應非阻塞模型。
2. i/o復用
如圖,與阻塞i/o模型相比,i/o復用不是阻塞在整個i/o的系統呼叫過程。i/o復用實現了多個連線或者多種連線(tcp,udp等)共用了同一種等待機制:slelect會返回某個連線的可讀條件,呼叫recv/recvfrom把所讀的資料報拷貝到應用程序的緩衝區中。
這個過程就好比如在乙個小區的郵件收發室中,當有新的郵件到達時,收發室的值班員會通知相應的人來領取這個郵件。
3.訊號驅動i/o模型
這種情況下主要是通過sigaction系統呼叫實現了sigio訊號的捕獲與處理函式。該模型的優點是在等待資料報到達期間,使用者程序可以不被阻塞,主迴圈可以繼續執行,只要等待來及訊號處理函式的通知;當訊號到達時系統便開始呼叫乙個i/o操作(呼叫recv/recvfrom)。
4.非同步i/o模型
由上圖可知,非同步i/o模型與訊號驅動模型的主要區別是:前者是由核心通知使用者程序i/o操作何時完成,而後者是核心通知使用者程序何時去啟動i/o操作(即是程序所等待的資料是停留在核心還是在程序緩衝區時變傳送訊號的區別)。這個區別也好比如是:一種是郵件收發室的值班員通知住戶來收發室拿郵件,另一種是直接把郵件拿到住戶的住處再讓住戶開門拿郵件。
UNIX網路程式設計 I O模型
乙個數入操作通常包括兩個不同的階段 1 等待資料準備。2 從核心項程序複製資料。對於乙個套結字上的輸入操作,第一步通常涉及等待資料從網路中到達。當所等待的資料從網路中到達。當所等待分組到達時,它被複製到核心中的某個緩衝區。第二步就是把資料從核心緩衝區複製到應用程序緩衝區。一.i o模型 1.阻塞性i...
Unix網路程式設計中的五種I O模型 轉
unix網路程式設計中的的五種i o模型 下面主要是把unp第六章介紹的五種i o模型。1.阻塞i o模型 例如udp函式recvfrom的核心到應用層 應用層到核心的呼叫過程是這樣的 首先把描述符 接受資料緩衝位址 大小傳遞給核心,但是如果此時 該與該套介面相應的緩衝區沒有資料,這個時候就recv...
二 UNIX網路I O模型
二 unix網路i o模型 1 阻塞i o模型 單操作而言 等待資料階段和拷貝資料階段都是阻塞的。2 非阻塞i o模型 單操作而言 等待資料階段是非阻塞的 不讓執行緒休眠 而拷貝資料仍然是阻塞的。可以不斷訪問其狀態 可讀可寫可連線 對成功與失敗馬上作出應對操作。3 i o復用模型 多操作而言 等待資...