Unix下五種IO模型簡介

2021-09-30 11:22:55 字數 1083 閱讀 3527

阻塞式io

阻塞式io模型是最一般的io模型。在這種模型下,io函式呼叫(read & write等等)都會在操作完成或者發生中斷以後才會返回。如果指定的運算元據沒有就緒,或者操作需要的外部條件(比如緩衝區)尚未符合要求,操作會一直阻塞。

非阻塞式io

相對於阻塞式io模型,非阻塞式io的特點就是:當所請求的io操作暫無法如期完成時,不要把本程序投入睡眠時,而是直接返回乙個錯誤(ewouldblock)。這樣做避免了程式長時間被掛起。但是由於在這種模式下,程式需要不斷去輪詢,會耗費大量的cpu時間。

io復用

io復用是指在乙個io請求內,等待多個可能的io物件可用(在unix下由檔案描述符來標記)。雖然io復用還是會導致阻塞,但是當io操作物件較多時,就能夠避免產生很大一部分的阻塞時間。在unix下,我們可以用select或poll函式實現io復用。

訊號驅動式io

在訊號驅動式io模型下,我們可以讓核心在描述符就緒時傳送sigio訊號通知我們。使用這種模型,我們需要首先開啟套接字的訊號驅動式io功能,並通過sigaction系統呼叫來安裝乙個訊號處理函式。

非同步io

非同步io的特點是:讓核心啟動某個io操作,並讓核心在這個操作完成後通知我們。在這期間,呼叫非同步io操作的程序不會被阻塞。

非同步io與訊號驅動式io的區別在於:訊號驅動式io是由核心通知我們何時可以啟動io操作,而非同步io模型是由核心通知我們操作何時完成。

五種模型的相互比較:

從上面的描述可以看出,前四種模型的第二階段是一樣的:資料從核心複製到呼叫者的緩衝區期間,程序阻塞於selectfrom等呼叫。

根據posix對同步io的定義:io操作導致程序阻塞直到操作完成。我們可以得出結論:前四種模型都是同步io模型。

剩下的special one——非同步io模型,由於不導致請求程序阻塞,則屬於posix定義的非同步io。

********************===end*************************=

UNIX五種I O模型

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

Unix下5種I O模型

unix下的5中i o模型 阻塞式i o 非阻塞式i o i o復用 select poll 訊號驅動式i o sigio 非同步i o posix的aio 系列函式 乙個輸入操作通常包括兩個不同階段 1 等待資料準備好 2 從核心向程序複製資料 對於套接字上的輸入操作,第一步等待資料從網路中到達,...

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...