1. 程式人生 > >IO模型的基本介紹

IO模型的基本介紹

同步,非同步,阻塞,非阻塞的基本概念

所謂同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不會返回。按照這個定義,其實絕大多數函式都是同步呼叫。
但是一般而言,我們在說同步、非同步的時候,特指那些需要其他部件協作或者需要一定時間完成的任務。
非同步的概念和同步相對。當一個非同步功能呼叫發出後,呼叫者不能立刻得到結果。當該非同步功能完成後,通過狀態、通知或回撥來通知呼叫者。
阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起(如遇到io操作)。函式只有在得到結果之後才會將阻塞的執行緒啟用。
有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。
非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前也會立刻返回,同時該函式不會阻塞當前執行緒。


小結

1. 同步與非同步針對的是函式/任務的呼叫方式:同步就是當一個程序發起一個函式(任務)呼叫的時候,一直等到函式(任務)完成,而程序繼續處於啟用狀態。
而非同步情況下是當一個程序發起一個函式(任務)呼叫的時候,不會等函式返回,而是繼續往下執行當,函式返回的時候通過狀態、通知、事件等方式通知程序任務完成。
2. 阻塞與非阻塞針對的是程序或執行緒:阻塞是當請求不能滿足的時候就將程序掛起,而非阻塞則不會阻塞當前程序

網路io的兩個階段

網路通訊無非就是收發資料:

傳送資料:對於應用軟體而言,傳送資料其實將需要傳送的資料和要求提交給作業系統,就相當於將應用程式的記憶體空間的資訊複製到作業系統的記憶體空間中去。

  這個過程稱之為copy data

接受資料:對於應用程式而言,需要等待作業系統從網路接受資訊的,這個過程稱之為wait data,接著從作業系統的快取中取出資料,這個過程也稱之為copy data。

 

 

程式之所以阻塞是由withdata階段耗時比較長,而copydata是記憶體件傳輸。而copydata速度快,基本沒有延時。

接下來會將四種io模型

blocking IO 阻塞IO模型
nonblocking IO 非阻塞IO模型
IO multiplexing 多路複用IO模型
asynchronous IO 非同步IO模型