Socket程式設計 I O復用

2021-06-18 15:18:28 字數 1388 閱讀 4019

之前基礎部分的socket流程是伺服器與客戶端之間是一對一的情形,但是,在實際情況下基本是多客戶端對一台伺服器,如何解決伺服器同時收到多個客戶端請求?基本上,這一類的需求就需要用到i/o復用的技術。

以下筆記詳情請參考《網路程式設計(卷一)》

i/o復用典型使用場合:

1) 伺服器同時處理多個客戶套接字請求;

2) 伺服器既要處理監聽套接字,又要處理已連線套接字;

3) 伺服器既要處理tcp,又要處理udp;

4) 伺服器處理多個協議;

首先我們需要了解一點,對於乙個套接字上的輸入操作,第一步通常涉及等待資料從網路中到達,當等待分組到達時,它被賦值到核心中的緩衝區;第二步就是把資料從核心緩衝區複製到接收程序緩衝區。

i/o模型

在unix中有5種可用的i/o模型:阻塞式i/o、非阻塞式i/o、i/o復用(select和poll)、訊號驅動式i/o、非同步i/o。(5個圖搞定)

阻塞式i/o模型:

非阻塞式i/o模型:

i/o復用模型:

訊號驅動式i/o模型:

非同步i/o模型:(圖中非同步i/o系統呼叫後,核心需要返回)

對比上述5種模型,前4種的主要區別在於第一階段,而第二階段是一樣的:在資料從核心複製到呼叫者的緩衝區期間,程序阻塞於recv呼叫。相反,非同步i/o兩階段都要處理。所以,前面4種模型都是同步操作模型,即請求程序阻塞,直到i/o操作完成。

socket之IO多路復用總結

1 基本概念 io多路復用是指核心一旦發現程序指定的乙個或者多個io條件準備讀取,它就通知該程序。io多路復用適用如下場合 1 當客戶處理多個描述字時 一般是互動式輸入和網路套介面 必須使用i o復用。2 當乙個客戶同時處理多個套介面時,而這種情況是可能的,但很少出現。3 如果乙個tcp伺服器既要處...

I O復用及程式設計模型

原文 i o多路復用和socket 由於io操作涉及到系統呼叫,涉及到使用者空間和核心空間的切換,所以理解系統的io模型,對於需要進入到系統呼叫層面進行程式設計來說是很重要的。從程式編寫的角度來看,i o就是呼叫乙個或多個系統函式,完成對輸入輸出裝置的操作。輸入輸出設定可以是顯示器 字元終端命令列 ...

I O復用及程式設計模型

原文 i o多路復用和socket 由於io操作涉及到系統呼叫,涉及到使用者空間和核心空間的切換,所以理解系統的io模型,對於需要進入到系統呼叫層面進行程式設計來說是很重要的。從程式編寫的角度來看,i o就是呼叫乙個或多個系統函式,完成對輸入輸出裝置的操作。輸入輸出設定可以是顯示器 字元終端命令列 ...