io模型
io指的是輸入輸出,模型指的是套路,io模型就是指所有可以實現輸入輸出的套路。
io的分類
io分為兩類:1.本地io 指的是輸入輸出到本地計算機,比如寫入硬碟,從硬碟中讀取資料等
2.網路io 指的是輸入輸出到網路計算機,速度遠比本地io慢。(網路io是非常重要的乙個知識點)
io模型一共分為4類分別是:1.阻塞型io
2.非阻塞型io
3.多路復用io
4.非同步io
接下裡我們來講講這幾個型別的io模型。
阻塞io模型
之前學習的io操作處理全部都是阻塞性型的。阻塞型io模型的操作大致如下圖:
當使用者程序呼叫了recvfrom這個系統呼叫,kernel就開始了io的第乙個階段:準備資料。對於network io來說,很多時候資料在一開始還沒有到達(比如,還沒有收到乙個完整的udp包),這個時候kernel就要等待足夠的資料到來。
而在使用者程序這邊,整個程序會被阻塞。當kernel一直等到資料準備好了,它就會將資料從kernel中拷貝到使用者記憶體,然後kernel返回結果,使用者程序才解除block的狀態,重新執行起來。
所以,blocking io的特點就是在io執行的兩個階段(等待資料和拷貝資料兩個階段)都被block了。
網路程式設計之IO模型
io多路復用概念 io發生時涉及的物件和步驟。對於乙個網路io,它會涉及到兩個系統物件,乙個是呼叫io的程序或者執行緒,另乙個就是系統核心。如當乙個read操作發生時,會先等待資料準備,然後將資料從核心拷貝到程序中去 阻塞io blocking io 特點 在執行io的兩個階段 等待資料和拷貝資料兩...
網路程式設計之 IO模型
我們這裡研究的io模型都是針對網路io的 blocking io 阻塞io nonblocking io 非阻塞io io multiplexing io多路復用 signal driven io 訊號驅動io asynchronous io 非同步io 由signal driven io 訊號驅動...
網路程式設計之IO模型 非同步IO
linux下的asynchronous io其實用得不多,從核心2.6版本才開始引入。先看一下它的流程 使用者程序發起read操作之後,立刻就可以開始去做其它的事。而另一方面,從kernel的角度,當它受到乙個asynchronous read之後,首先它會立刻返回,所以不會對使用者程序產生任何bl...