Linux下常見的IO模型

2022-07-03 22:54:18 字數 1215 閱讀 9159

前三種都是同步,只有最後一種才是非同步io。

簡介:程序會一直阻塞,直到資料拷貝完成。

應用程式呼叫乙個io函式,導致應用程式阻塞,等待資料準備好。如果資料沒有準備好,一直等待。資料準備好了,從核心拷貝到使用者空間。

執行完畢後,io函式會向應用程式返回成功響應,應用程式得到響應後,就不再阻塞,並進行後面的工作。

網路中io阻塞如下圖所示:

示例:餐廳吃飯,點完餐後,只能坐在餐廳裡面等做好飯,吃完才能去逛商場,中間等待做飯的時間浪費掉了。這就是阻塞。

簡介:非阻塞io通過程序反覆呼叫io函式(多次系統呼叫,並馬上返回);在資料拷貝的過程中,程序是阻塞的。

應用程式呼叫乙個io函式,這個io操作會從核心中立即返回(當io操作無法完成時,返回乙個錯誤)。但是這個io函式具體要執行的事情(寫資料)可能並沒有完成。

而對於應用程式,雖然這個io操作很快就返回了,但是它並不知道這個io操作是否真的成功了。為了知道io操作是否成功,一般有兩種策略:

一是需要應用程式主動地迴圈地去問,直到資料準備好為止,在這個不斷問的過程中,會大量的占用cpu的時間;

二是採用io通知機制,比如:io多路復用或訊號驅動io。

網路io非阻塞如下圖所示:

示例:又想去逛商場,又擔心飯好了。所以逛一會,回來詢問服務員飯好了沒有,來來回回好多次。這就是非阻塞。

簡介:比阻塞io並沒有什麼優越性,關鍵是能實現同時對多個io埠進行監聽。

io復用模型會用到select、poll、epoll函式,這幾個函式也會使程序阻塞,但是和阻塞io所不同的,這兩個函式可以同時阻塞多個io操作。而且可以同時對多個讀操作,多個寫操作的io函式進行檢測,直到有資料可讀或可寫時,才真正呼叫io操作函式。

網路io多路復用如下圖所示:

示例:商場安裝了電子螢幕用來顯示點餐的狀態,這樣飯是否好了,都直接看電子螢幕就可以了。這就是io多路復用。

http協議整理

php安全之web攻擊

秒殺系統設計優化

mysql優化

參考資料:

LINUX下常見的IO模型

前三種都是同步,只有最後一種才是非同步io。簡介 程序會一直阻塞,直到資料拷貝完成。應用程式呼叫乙個io函式,導致應用程式阻塞,等待資料準備好。如果資料沒有準備好,一直等待。資料準備好了,從核心拷貝到使用者空間。執行完畢後,io函式會向應用程式返回成功響應,應用程式得到響應後,就不再阻塞,並進行後面...

linux下的io模型

因為作業系統的資源是有限的,如果訪問資源的操作過多,必然會消耗過多的資源,而且如果不對這些操作加以區分,很可能造成資源訪問的衝突。所以,為了減少有限資源的訪問和使用衝突,unix linux的設計哲學之一就是 對不同的操作賦予不同的執行等級,就是所謂特權的概念。簡單說就是有多大能力做多大的事,與系統...

linux下的IO模型詳解

開門見山,linux下的如中io模型 阻塞io模型,非阻塞io模型,io復用模型,訊號驅動io模型,非同步io模型,見下圖 接下來一一講解這5種模型 阻塞型io 最簡單的一種io模型,簡單理解就是死等,即程序或執行緒一直等待莫格條件,不滿足則一直等待。非阻塞型io 應用程序與核心互動,目的未達到之前...