計網 問題3 網路模型 I O復用

2021-10-09 20:06:16 字數 1376 閱讀 2095

io復用是一種機制,簡單說就是io事件的到來、讀寫、異常等情況都有核心幫你監控了,應用程式只需要處理那些核心通知你的io控制代碼即可,這種機制的前提是即使建立數萬連線,某時刻可讀寫的fd數量只佔總連線量的很小的比例,因此借助於核心事件驅動機制,就可以實現單執行緒的數萬socket的管理。

舉個例子:

網路設計模式中,如何處理各種i/o事件是其非常重要的一部分,reactor 和proactor兩種事件處理模型應運而生,可以使用同步i/o實現reactor模型,使用非同步i/o實現proactor模型。

(1)reactor事件處理模型:

reactor模型是同步i/o事件處理的一種常見模型,其核心思想:將關注的i/o事件註冊到多路復用器上,一旦有i/o事件觸發,將事件分發到事件處理器中,執行就緒i/o事件對應的處理函式中。模型中有三個重要的元件:

多路復用器:由作業系統提供介面,linux提供的i/o復用介面有select、poll、epoll

事件分離器:將多路復用器返回的就緒事件分發到事件處理器中

事件處理器:處理就緒事件處理函式

reactor模型工作的簡化流程:

(2)proactor事件處理模型

與reactor不同的是,proactor使用非同步i/o系統介面將i/o操作託管給作業系統,proactor模型中分發處理非同步i/o完成事件,並呼叫相應的事件處理介面來處理業務邏輯.

proactor模型的簡化的工作流程:

proactor利用非同步i/o並行能力帶來更高的效率,但同時增加了程式設計複雜度。windows對非同步i/o提供了很好的支援,而linux對非同步i/o操作支援並不是特別理想,因此linux平台上還是以reactor模型為主,boost asio採用的是proactor模型。

(3)併發模式

在i/o密集型的程式,採用併發方式可以提高cpu的使用率,可採用多程序和多執行緒兩種方式實現併發。其中包括半同步/半非同步模式、半同步/半反應堆模式、半同步/半反應堆模式改進版、follower/leader模式。

同步和非同步概念

併發模式中的同步非同步和 i/o模型中的同步非同步並不一樣:

併發模式中同步指程式按照**順序執行,非同步指程式依賴事件驅動

i/o模型中同步非同步用來區分是主動讀取資料結構,還是核心幫忙完成資料的讀取再返回給執行緒

39 網路IO模型

我們這裡研究的io模型都是針對網路io的 blocking io 阻塞io nonblocking io 非阻塞io io multiplexing io多路復用 signal driven io 訊號驅動io asynchronous io 非同步io 由signal driven io 訊號驅動...

9 1 1 網路模型

9.1.1 osi七層模型。1.應用層 一般指應用程式,該層主要負責確定通訊物件。常用協議有ftp,http,snmp 2.表示層 資料的編碼和轉化,根據不同的應用目的將資料處理為不同格式,表現出各種副檔名。3.會話層 負責在網路中的兩個結點之間建立,維護,控制會話。提供單工,半雙工,全雙工 x,h...

0905網路模型

pid t waitpid pid t pid,int status,int options pid 1 等待程序組識別碼為 pid 絕對值的任何子程序。pid 1 等待任何子程序,相當於 wait pid 0 等待程序組識別碼與目前程序相同的任何子程序。pid 0 等待任何子程序識別碼為 pid ...