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/sendto、recvmsg/sendmsg,它們預設是阻塞的。
2、非阻塞式i/o模型
呼叫fcntl可以把乙個套接字設定成非阻塞式。
3.i/o復用模型
i/o復用是通過呼叫select或者poll,阻塞在這兩個系統呼叫之上,而不是阻塞在真正的i/o系統呼叫上。
4、訊號驅動式i/o模型
我們首先開啟套接字的訊號驅動式i/o功能,並通過sigaction系統呼叫安裝乙個訊號處理函式。該系統呼叫將立即返回,當資料報準備好讀取時,核心就為該程序產生乙個sigio訊號。我們可以在訊號處理函式中讀取資料報。
5、非同步i/o模型
告知核心啟動某個操作,並讓核心在整個操作完成後(包括將資料從核心複製到我們的緩衝區)通知我們。這種模型和前面訊號驅動模型的區別在於:訊號驅動式i/o是由核心通知我們何時可以啟動乙個i/o操作,而非同步i/o模型是由核心通知我們i/o操作何時完成。
五種i/o模型比較:
參考:unix網路程式設計卷1:套接字聯網api(第三版)
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下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缺點是,需要不停訪問資源是否準備...