5種IO模型和5種通訊模式

zecoo發表於2016-12-25

作業系統的五種通訊模型

1、阻塞I/O

就是我們常見的socket,監聽埠收到訊息進行處理,並把結果返回給客戶端

執行I/O操作完成前會一直進行等待,不會將控制權交給程式。套接字預設為阻塞模式

應用程式呼叫一個IO函式,導致應用程式阻塞,等待資料準備好。 如果資料沒有準備好,一直等待….資料準備好了,從核心拷貝到使用者空間,IO函式返回成功指示,程式繼續執行

2、非阻塞I/O

非阻塞IO通過程式反覆呼叫IO函式,與阻塞不同的是,呼叫IO函式後,核心會立刻返回一個錯誤的介面,該程式會不斷去呼叫查詢結果的函式recv(),直到收到正確的結果,在這個過程中程式是阻塞的

非阻塞模式套接字與阻塞模式套接字相比,不容易使用。使用非阻塞模式套接字,需要編寫更多的程式碼,但是,非阻塞套接字在控制建立的多個連線,在資料的收發量不均,時間不定時,明顯具有優勢


3、I/O複用模型

主要是select和epoll;對一個IO埠,兩次呼叫,兩次返回,比阻塞IO並沒有什麼優越性;關鍵是能實現同時對多個IO埠進行監聽;
I/O複用模型會用到select、poll、epoll函式,這幾個函式也會使程式阻塞,但是和阻塞I/O所不同的的,這兩個函式可以同時阻塞多個I/O操作。而且可以同時對多個讀操作,多個寫操作的I/O函式進行檢測,直到有資料可讀或可寫時,才真正呼叫I/O操作函式

有興趣的可以去看看NIO


4、訊號驅動I/O

首先我們允許套介面進行訊號驅動I/O,並安裝一個訊號處理函式,程式繼續執行並不阻塞。當資料準備好時,程式會收到一個SIGIO訊號,可以在訊號處理函式中呼叫I/O操作函式處理資料


5、非同步I/O模型

當一個非同步過程呼叫發出後,呼叫者不能立刻得到結果。實際處理這個呼叫的部件在完成後,通過狀態、通知和回撥來通知呼叫者的輸入輸出操作


介面呼叫的五種通訊模式

1、同步點對點服務模式

就是我們常見的發出http請求,等待服務端返回介面,在這個過程中請求發出後一直在等待著結果,所以說是同步

    

2、非同步點對點訊息模式1

客戶端發出請求後,程式繼續執行,當伺服器處理完成時,通過回撥函式通知程式


3、非同步點對點訊息模式2

增加了中間代理,如cdn、nginx等,加快伺服器的應答



4、非同步廣播訊息模式

基於訊息訂閱分發,將不同訊息分給不同的伺服器執行,也是一種分散式叢集處理的一種思想,zookeeper就是這種方式


5、去中心化分散式式

去掉ESB匯流排的控制,從而去掉系統中樞單點效能的瓶頸,而且後方單點伺服器形成一個新活力的網路,形成一個無狀態的系統



啦啦啦。。。。。。。


相關文章