I O模型以及select和poll函式

2021-06-15 00:30:51 字數 988 閱讀 9964

unix下可用的5中i/o模型:

1. 阻塞式i/o模型

2.非阻塞式i/o模型

3.i/o復用(select poll epoll):目前linux下幾乎都使用epoll。

4.訊號驅動式i/o(sigio)

5.非同步i/o(posix的aio_系列函式)

預設情況下,所有套接字都是阻塞的,write,read套接字時都是阻塞的,下**於unp。

和阻塞io相對應,不管有沒有資料到達系統呼叫都立即返回。我們可以使用 fcntl(fd, f_setfl, flag | o_nonblock),將套接字標誌變成非阻塞。採用非阻塞io模式時,需要使用乙個迴圈操作來不停地測試檔案描述符是否可讀,這是非常浪費cpu資源的操作,很少使用。

使用該模型時,核心在描述符就緒時傳送sigio訊號通知我們。優勢在於:等待資料時,程序不被阻塞,當資料到達時,產生訊號,交給訊號處理程式進行處理。

呼叫aio_read函式,告訴核心描述字,緩衝區指標,緩衝區大小,檔案偏移以及通知的方式,然後立即返回。當核心將資料拷貝到緩衝區後,再通知應用程式。

這個操作和訊號驅動的區別就是:非同步模式在資料從核心緩衝區拷貝到使用者緩衝區時才通知使用者程式,而訊號驅動模式在資料到來時就通知使用者程式。

IO多路復用 select模型

客戶端 見 c s通訊 伺服器阻塞型使用 伺服器端 include include include include include include include include include include include include int main set local address m...

IO多路轉接模型select 函式

簡單版通訊 一端輪流說一句 實現讀寫同步 1.管道是半雙工的,要想實現雙向通訊,需要設定兩條管道 2.當寫端沒寫或是管道內緩衝區資料為空,那麼讀端讀資料會發生阻塞 當寫端斷開,讀端讀取管道會返回零,會一直while 1 迴圈,需要ctrl c結束 寫端是指給管道內寫入資料 讀端是指從管道內讀取資料 ...

IO模型 三 select 選擇機制

因為這個模型是後來才使用的,差一點就忘記了.這個模型是從unix裡來的,是比較早的一種模型。上次總結的wsaeventselect模型是微軟將其進行改進後的版本。來看一下這個函式宣告 int select intnfds 忽略 fd set far readfds 讀操作 fd set far wr...