阻塞io模型
在核心將資料準備好,系統呼叫會一直等待,所有的套接字預設都是阻塞io方式
阻塞io是最常見的io模型
非阻塞io模型
非阻塞io往往需要程式設計師迴圈的方式反覆嘗試讀取檔案描述符,這個過程稱為輪詢,這對於cpu來說的話是較大的浪費,一般只有特定的場景下才能使用
訊號驅動io模型
核心將資料準備好的時候,使用sigio訊號通知應用程式進行io操作
非同步io
由核心在資料拷貝完成的時候,通知應用程式(而訊號驅動是高數應用程式什麼時候進行資料拷貝)
io多路轉接
io多路轉接看起來和阻塞io類似,實際上最核心在於io多路轉接能夠同時等待多個檔案描述符的就緒狀態
高階io概念
1)同步與非同步
將乙個檔案描述符設定成非阻塞io
乙個檔案描述符預設都是阻塞io,可以使用fcntl()函式設定成阻塞io。
#include #include int fcntl(int fd, int cmd, ... /* arg */ );
根據我們傳遞的cmd的值不同,後面的引數也不相同
fcntl函式有五種功能
將乙個檔案描述符設定成非阻塞只需要三行**
int f1 = fcntl(fd,f_getfl);
f1 = f1 | o_nonblock;
fcntl(fd,f_setfl,f1);
linux中五種高階IO模型總結
高階io模型 高階io其實是相對於基礎io的乙個優化,一般基礎io都是像read,write這樣的函式來供我們呼叫io介面,當我們呼叫它們時,它們一般情況下就是阻塞接收 也就是我們的程式在執行read函式時停下來,如果檔案中有資料了,再進行讀取,等io操作完畢後,才能繼續執行下面的程式,當然我們也可...
Linux五種IO模型
五種io模型的理解 阻塞io 收銀台等待 在核心將資料準備好之前,系統調 會 直等待.所有的套接字,預設都是阻塞 式.阻塞io 座位等待 往往需要程式設計師迴圈的方式反覆嘗試讀寫檔案描述符,這個過程稱為輪詢.訊號驅動io 等服務員叫 核心將資料準備好的時候,使 sigio訊號通知應用程式進行io操作...
Linux 五種I O模型
首先,我們來看一下,有哪五種i o模型 小結 非阻塞i o,記錄鎖,系統v流機制,i o多路轉接 也叫i o多路復用 readv和writev函式以及儲存對映i o mmap 這些統稱為高階i o。首先,我們來看乙個介面 int fcntl int fd,int cmd,arg 功能 針對描述符提供...