Unix下5種I O模型

2021-07-12 04:20:15 字數 1217 閱讀 2984

unix下的5中i/o模型:

阻塞式i/o

非阻塞式i/o

i/o復用(select poll)

訊號驅動式i/o(sigio)

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

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

1 等待資料準備好

2 從核心向程序複製資料

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

阻塞式i/o

最流行的i/o模型,系統呼叫直到資料報到達並且複製到應用程序緩衝區中或者發生錯誤才返回。最常見的錯誤是系統呼叫被訊號中斷。

非阻塞式i/o

非阻塞是告訴核心:當所請求的i/o操作非得把本程序投入睡眠時,不要把本程序投入睡眠,而是返回乙個錯誤。

當乙個應用程序對乙個非阻塞的描述符迴圈呼叫系統呼叫時,可能返回錯誤或者成功,稱為輪詢(polling).會耗費大量的cpu時間。

i/o復用模型

呼叫select和poll,阻塞在這兩個系統呼叫中的乙個,而不是阻塞在真正的i/o系統呼叫上。i/o復用的優勢在於可以等待多個描述符。

訊號驅動式i/o

讓核心在描述符就緒時傳送sigio訊號通知我們。這種模型優勢在於等待資料到達期間程序不被阻塞,主迴圈可以繼續執行,只要等待來自訊號處理函式的通知:既可以是資料準備好被處理,也可以是資料報準備好被讀取。

非同步i/o模型

非同步io由posix規範定義,告知核心啟動某個操作並在整個操作(包括資料從核心複製到程序的緩衝區)完成後通知我們,和訊號驅動式io的區別:訊號驅動式io是核心通知我們何時可以啟動乙個io操作,非同步io則是核心通知我們io操作何時完成。

Unix下5種I O模型

unix下i o模型主要分為5種 1 阻塞式i o 2 非阻塞式i o 3 i o復用 select和poll 4 訊號驅動式i o 5 非同步i o 1 阻塞式i o模型 unix基本的套接字介面,例如 connect accept read write recv send recvfrom se...

Unix下5種基本的I O模型

unix下5種基本的i o模型 1.阻塞i o 2.非阻塞i o 3.i o復用 select和poll 4.訊號驅動i o sigio 5.非同步i o posix.1的aio 系列函式 unix中乙個輸入操作一般有兩個不同的階段 1.等待資料準備好。2.從核心到程序拷貝資料。對於乙個sockt上...

Unix下5中I O模型

阻塞式i o 如建立socket連線,需要等待3次握手完成才可繼續向下執行程式,這期間就會造成cpu浪費,程式設計時用到的最多的,也是最初級的,非阻塞式i o 如建立socket連線,設定setblocking,則建立連線語句執行後立刻返回,無需等待,相比阻塞式i o缺點是,需要不停訪問資源是否準備...