目錄
一、阻塞式i/o模型
二、非阻塞式i/o模型
三、i/o復用模型
四、訊號驅動式i/o模型
五、非同步i/o模型
六、參考文獻
本文整理了阻塞i/o模型、非阻塞式i/o、i/o復用(select和poll)、訊號驅動式i/o(sigio)、非同步i/o原理知識點。
一、阻塞式i/o模型
備註:程序呼叫recvfrom, 系統呼叫直到資料到達且資料被複製到應用程序的快取區或者發生錯誤時才返回結果,應用程序開始資料資料。特點:圖示中第1步和第2步都是阻塞的。
二、非阻塞式i/o模型
備註:呼叫recvfrom時沒有資料返回,因此核心轉而立即返回乙個ewouldblock錯誤;資料準備好被複製到應用程序快取區,於是recvfrom成功返回。特點:圖示第1步沒有阻塞;第2步阻塞;由於持續輪詢核心呼叫recvfrom,耗費大量cpu資源。
三、i/o復用模型
備註:i/o復用可以呼叫select/poll阻塞在這兩個系統呼叫中的某乙個上,而不是阻塞在真正的i/o系統呼叫上。圖示中應用程序阻塞於select呼叫,等待資料報套接字變為可讀,當select返回套接字可讀這一條件時,呼叫recvfrom把所讀資料複製到應用程序緩衝區。特點:select等待多個描述符就緒;即圖示中第1步可以等待多個檔案描述符。
與i/o復用密切相關的另一種i/o模型:在多執行緒中使用使用阻塞i/o;該模式沒有使用select阻塞在多個檔案描述符上,而是使用多執行緒,每個檔案描述符乙個執行緒,這樣每個執行緒都可以自由地呼叫像recvfrom之類的阻塞式系統呼叫。
四、訊號驅動式i/o模型
備註:應用程式開啟套接字的訊號驅動式i/o功能,通過sigaction系統呼叫安裝乙個訊號處理函式。系統呼叫立即返回,應用程式繼續工作,即:非阻塞。當資料報準備好讀取後,核心為該程序產生乙個sigio訊號。進而可以呼叫recvfrom讀取資料報。特點:核心在描述符就緒時傳送sigio訊號通知應用程式,等待資料報的過程不被阻塞;即:圖示第1步不被阻塞。
五、非同步i/o模型
備註:非同步i/o由posix規範定義,工作機制:應用程序告訴核心啟動某個動作,並在核心處理整個過程含資料準備以及資料從核心空間複製到使用者空間完成後通知應用程序。應用程序在等待i/o完成期間不被阻塞。特點:應用程序不被阻塞呼叫aio_read後立即返回;核心在第1步和第2步全部完成後通知應用程序;支援該非同步i/o模型的系統少見。
六、參考文獻
《unix網路程式設計卷1》
五種IO模型
再講io模型之前,給大家舉乙個釣魚的例子。張三去釣魚,他釣魚的時候一動不動,一直看著魚竿,看有沒有動,無論是誰叫他,他都不動,只有等魚梢動了 魚上鉤了 他才會動 李四去釣魚,他沒有像張三那樣瓷楞著,只是時不時的輪詢檢查魚竿有沒有動。一直在動。王五也來釣魚,他就比較聰明了,在魚竿上掛個鈴鐺,只要鈴鐺響...
五種IO模型
阻塞io 在核心將資料準備好之前,系統呼叫會一直等待,所有的套接字都是預設阻塞方式 非阻塞io 如果核心還沒有將資料準備好,系統呼叫會直接返回,並返回錯誤碼 非阻塞io往往需要以迴圈的方式反覆讀寫檔案描述符,這個過程稱為輪詢,對cpu的浪費較大,一般只在特定的場景下使用 訊號驅動io 核心將資料準備...
五種IO模型
1.五種io分為阻塞i o 非阻塞i o 訊號驅動io 多路復用i o select 和 poll 非同步i o 前四個被稱為同步io。1.1乙個輸入操作一般有兩個不同的階段 2.1阻塞io 程序呼叫recvfrom,從使用者態轉到核心態,直到資料準備好且拷貝到應用程式緩衝區或者出錯 最常見的錯誤是...