作業系統的五種通訊模型
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匯流排的控制,從而去掉系統中樞單點效能的瓶頸,而且後方單點伺服器形成一個新活力的網路,形成一個無狀態的系統
啦啦啦。。。。。。。