UNIX網路程式設計 I O模型

2021-07-10 11:57:43 字數 1663 閱讀 5006

乙個數入操作通常包括兩個不同的階段:

(1)等待資料準備。

(2)從核心項程序複製資料。

對於乙個套結字上的輸入操作,第一步通常涉及等待資料從網路中到達。當所等待的資料從網路中到達。當所等待分組到達時,它被複製到核心中的某個緩衝區。第二步就是把資料從核心緩衝區複製到應用程序緩衝區。

一. i/o模型

1.阻塞性i/o模型

程序呼叫recvfrom,其系統呼叫直到資料報到達且被複製到應用程序的緩衝區中或者發生錯誤才返回。recvfrom成功返回後,應用程序開始處理資料報。

2.非阻塞式i/o模型

程序把乙個套結字設定為非阻塞是為了通知核心:當所請求的 i/o操作非得把本程序投入睡眠才能完成時,不要把程序投入睡眠,而是返回乙個錯誤(即若無資料則不等待),當乙個應用程序像這樣對乙個非阻塞描述符迴圈呼叫recvfrom時,我們稱之為輪詢。然而這麼作往往會消耗大量的cpu時間,所以通常是在專門提供一種功能的系統時採用。

3.i/o復用模型

有了i/o復用,我們就可以呼叫select和poll,阻塞在 這兩個系統呼叫中的某乙個上,而不是阻塞在真正的i/o系統呼叫上。

我們阻塞於select呼叫,等待資料報套結字變為可讀。當select返回套結字可讀這一條件時我們呼叫recvfrom把所讀資料報複製到應用程序緩衝區。

而事實上select需要兩個而不是單個系統呼叫,所以在這方面i/o復用還稍有劣勢,但是select的優勢在於其可以等待多個描述符就緒。

4.訊號驅動式i/o

使用訊號讓核心在描述符就緒是傳送sigio訊號通知我們的方式為訊號驅動式i/o。

我們首先開啟套結字的訊號驅動式i/o功能,並通過sigaction系統呼叫安裝乙個訊號處理函式。讓系統呼叫立即返回,我們的程序繼續工作,也就是可以說沒有被阻塞。當資料報準備好讀取時,核心則產生乙個sigio訊號。我們隨後即可在訊號處理函式中呼叫recvfrom讀取資料報,並通知主迴圈資料以準備好待處理,也可以立即停止主迴圈,讓他讀取資料報。

這種模型的優勢在於等待資料報到達期間程序不被阻塞。主迴圈可以繼續執行,只要等待來自訊號處理函式的通知。

5.非同步i/o模型

非同步i/o操作昊蘇核心某個操作,並讓核心在整個操作完成後通知我們。這種模型於訊號驅動模型類似,但不同的是,訊號驅動模型告訴我們何時可以啟動i/o操作,而非同步i/o模型是由核心通知我們i/o操作何時完成。

二. 各種i/o模型的比較

同步i/o操作:導致請求程序阻塞,直到i/o操作完成。

非同步i/o操作:不導致請求程序阻塞。

Unix網路程式設計中的I O模型

1.阻塞i o模型與非阻塞i o模型 阻塞與非阻塞的模型主要區別是 阻塞i o模型中使用者程序在能讀取資料之前會進入睡眠或者掛起狀態 而非阻塞情況下遇到讀取資料失敗時核心直接返回錯誤訊號,使用者程序便在成功返回資料之前一直在呼叫recv操作詢問資料可讀性,因此這種情況也成為輪詢機制。這兩種過程就好比...

二 UNIX網路I O模型

二 unix網路i o模型 1 阻塞i o模型 單操作而言 等待資料階段和拷貝資料階段都是阻塞的。2 非阻塞i o模型 單操作而言 等待資料階段是非阻塞的 不讓執行緒休眠 而拷貝資料仍然是阻塞的。可以不斷訪問其狀態 可讀可寫可連線 對成功與失敗馬上作出應對操作。3 i o復用模型 多操作而言 等待資...

《網路程式設計》I O 模型

在分析 i o 模型之前,首先了解 同步 i o 和 非同步 i o 的基本概念 同步 i o 程序呼叫 i o 操作函式時,在 i o 操作函式返回之前,該程序會被掛起 即阻塞 直到 i o 操作完成後返回 非同步 i o 程序呼叫 i o 操作函式時,在 i o 操作函式返回之前,該程序不會被掛...