二、unix網路i/o模型:
1)阻塞i/o模型(單操作而言)
等待資料階段和拷貝資料階段都是阻塞的。
2)非阻塞i/o模型(單操作而言)
等待資料階段是非阻塞的(不讓執行緒休眠),而拷貝資料仍然是阻塞的。
可以不斷訪問其狀態(可讀可寫可連線),對成功與失敗馬上作出應對操作。問題一:i/o復用模型與阻塞i/o模型的區別?3)i/o復用模型(多操作而言)等待資料階段selector阻塞的,而拷貝資料仍然是阻塞的。4)訊號驅動i/o模型(單操作而言)等待資料階段是非阻塞的(不讓執行緒休眠),而拷貝資料仍然是阻塞的。5)非同步i/o模型(單操作而言)等待資料與資料拷貝的時候程序都無需阻塞。
原理:i/o復用模型與阻塞i/o模型均在等待資料與拷貝資料中產生阻塞,復用模型使用了selector進行多操作的處理,可同時對多個io
埠進行監聽。
問題二:訊號驅動i/o模型與非阻塞i/o模型的區別?
程序,而非阻塞模型則需要程序進行輪詢。
問題三:非同步i/o模型與訊號驅動i/o模型區別?
原理:訊號驅動i/o模型是何時可以開始進行i/o操作,而i/o操作時程序阻塞;而非同步i/o模型是何時完成,故整個過程非阻塞。
6)i/o多路復用(selector與epoll):
linux將儲存器分為「核心空間」和「使用者空間」
①selector:
1.單個程序開啟的fd的fd_setsize預設值為1024,也就是最大連線數為1024個客戶端。(可修改巨集重新編譯核心,但網路效率會下降;也可以選擇多程序方案解決,但程序間資料的互動非常麻煩)2.當有乙個很大的socket集合,鏈路空閒時,每次呼叫會線性掃瞄全部的集合,導致效率呈現線性下降。
3.需要把核心fd訊息通知使用者空間
②epoll:
1.支援乙個程序開啟的socket描述符(fd)不受限制(僅受限與作業系統的最大檔案控制代碼)(1gb記憶體機器大概是10萬個控制代碼)
2.i/o效率不會隨著fd數目的增加而線性下降(只對活躍socket進行操作)
3.使用mmap加速核心與使用者空間的訊息傳遞(核心和使用者空間mmap同乙個記憶體實現)
4.api更加簡單(建立epoll描述符,新增監聽事件、阻塞等待所監聽事件的發生,關閉epoll描述符等)
UNIX網路程式設計 I O模型
乙個數入操作通常包括兩個不同的階段 1 等待資料準備。2 從核心項程序複製資料。對於乙個套結字上的輸入操作,第一步通常涉及等待資料從網路中到達。當所等待的資料從網路中到達。當所等待分組到達時,它被複製到核心中的某個緩衝區。第二步就是把資料從核心緩衝區複製到應用程序緩衝區。一.i o模型 1.阻塞性i...
Unix網路程式設計中的I O模型
1.阻塞i o模型與非阻塞i o模型 阻塞與非阻塞的模型主要區別是 阻塞i o模型中使用者程序在能讀取資料之前會進入睡眠或者掛起狀態 而非阻塞情況下遇到讀取資料失敗時核心直接返回錯誤訊號,使用者程序便在成功返回資料之前一直在呼叫recv操作詢問資料可讀性,因此這種情況也成為輪詢機制。這兩種過程就好比...
網路IO模型(二) Linux IO 模型
作為軟體開發者特別是server開發,平時要面對大量的跨程序互動場景,各種跨程序呼叫。雖然現在的開發語言為我們提供了很好的封裝,不用過度關心底層網路io的細節,但是作為開發者,還是要了解基本的原理。我們面對的是乙個個黑盒,但是為了排查問題或者寫出效能更好的程式,必須當成白盒來研究。linux io ...