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

2021-09-07 14:36:19 字數 1303 閱讀 5320

**:unix網路程式設計中的的五種i/o模型

下面主要是把unp第六章介紹的五種i/o模型。

1. 阻塞i/o模型

例如udp函式recvfrom的核心到應用層、應用層到核心的呼叫過程是這樣的:首先把描述符、接受資料緩衝位址、大小傳遞給核心,但是如果此時 該與該套介面相應的緩衝區沒有資料,這個時候就recvfrom就會卡(阻塞)在這裡,知道資料到來的時候,再把資料拷貝到應用層,也就是傳進來的位址空 間,如果沒有資料到來,就會使該函式阻塞在那裡,這就叫做阻塞i/o模型,如下圖:

2. 非阻塞i/o模型

如果recvfrom從應用層到核心的時候,如果該緩衝區沒有資料的話,就直接給我返回,並且返回乙個ewouldblock錯誤,一般都對非阻塞i/o模型進行輪詢,就是一直在檢查這個狀態,看核心是不是有資料到來呼叫,過程如下圖:

3. i/o復用模型

設定一組套接字,如果這些套接字有乙個以上出現了可讀、可寫、或者異常,select都會返回,這個時候,可以檢查室哪個套接字狀態達到了,因為 select函式的套接字集是 值=結果 的,當select返回的時候,集合中的套接字是變化的,這個返回的套接字是滿足要求的,通常程式的做法是,對想要了解的套接字,進行分開處理。使用 select的好處是:能夠等待多個套接字準備好。

4. 訊號驅動i/o模型

當核心為我們準備好資料的時候,就會傳送 sigio 訊號,我們 可以呼叫 sigaction 安裝 sigio 訊號的處理函式,這個時候就可以在 sigio 訊號處理函式中進行 recvfrom 函式來接受資料報:

5. 非同步i/o模型

是讓核心拷貝完之後通知我們。訊號驅動i/o是當核心準備好資料的時候,通知我們可以呼叫recvfrom了,而非同步i/o模型是核心通知我們i/o操作完成的時候通知我們:

UNIX五種I O模型

unix的五種i o模型 阻塞式i o模型,非阻塞式i o模型,i o復用模型,訊號驅動式i o模型,非同步i o模型。這些概念看似容易混淆,從unix底層的i o操作的角度來分析,其實不難理解。乙個輸入操作通常包括以下兩個階段 等待資料準備好 包括等待資料從網路中到達,資料到達後存入核心的緩衝區中...

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

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

unix下網路程式設計之I O復用(五)

本章節是用基本的linux unix基本函式加上select呼叫編寫乙個完整的伺服器和客戶端例子,可在linux ubuntu 和unix freebsd 上執行,客戶端和服務端的功能如下 客戶端從標準輸入讀入一行,傳送到服務端 服務端從網路讀取一行,然後輸出到客戶端 客戶端收到服務端的響應,輸出這...