linux 五種高階IO模型

2021-09-25 05:14:21 字數 1113 閱讀 2979

阻塞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 功能 針對描述符提供...