伺服器模型 從單執行緒阻塞到多執行緒非阻塞(中)

2021-08-14 01:59:03 字數 744 閱讀 8132

伺服器模型涉及到執行緒模式和io模式,搞清楚這些就能針對各種場景有的放矢。該系列分成三部分:

* 單執行緒/多執行緒阻塞i/o模型

* 單執行緒非阻塞i/o模型

* 多執行緒非阻塞i/o模型,reactor及其改進

這裡**的伺服器模型主要指的是伺服器端對i/o的處理模型。從不同維度可以有不同的分類,這裡從i/o的阻塞與非阻塞、i/o處理的單執行緒與多執行緒角度**伺服器模型。

對於i/o,可以分成阻塞i/o與非阻塞i/o兩大型別。阻塞i/o在做i/o讀寫操作時會使當前執行緒進入阻塞狀態,而非阻塞i/o則不進入阻塞狀態。

對於執行緒,單執行緒情況下由一條執行緒負責所有客戶端連線的i/o操作,而多執行緒情況下則由若干執行緒共同處理所有客戶端連線的i/o操作。

多執行緒阻塞i/o模型通過引入多執行緒確實提高了伺服器端的併發處理能力,但每個連線都需要乙個執行緒負責i/o操作。當連線數量較多時可能導致機器執行緒數量太多,而這些執行緒大多數時間卻處於等待狀態,造成極大的資源浪費。鑑於多執行緒阻塞i/o模型的缺點,有沒有可能用乙個執行緒就可以維護多個客戶端連線並且不會阻塞在讀寫操作呢?下面介紹單執行緒非阻塞i/o模型。

單執行緒非阻塞i/o模型最重要的乙個特點是,在呼叫讀取或寫入介面後立即返回,而不會進入阻塞狀態。在**單執行緒非阻塞i/o模型前必須要先了解非阻塞情況下套接字事件的檢測機制,因為對於單執行緒非阻塞模型最重要的事情是檢測哪些連線有感興趣的事件發生。一般會有如下三種檢測方式。

當多個客戶端向伺服器請求時,伺服器端會儲存乙個套接字連線列表中,應用層執行緒對套接字列表輪詢嘗

伺服器模型 從單執行緒阻塞到多執行緒非阻塞(上)

伺服器模型涉及到執行緒模式和io模式,搞清楚這些就能針對各種場景有的放矢。該系列分成三部分 這裡 的伺服器模型主要指的是伺服器端對i o的處理模型。從不同維度可以有不同的分類,這裡從i o的阻塞與非阻塞 i o處理的單執行緒與多執行緒角度 伺服器模型。對於i o,可以分成阻塞i o與非阻塞i o兩大...

伺服器模型 從單執行緒阻塞到多執行緒非阻塞(上)

前言的前言 伺服器模型涉及到執行緒模式和io模式,搞清楚這些就能針對各種場景有的放矢。該系列分成三部分 單執行緒 多執行緒阻塞i o模型 單執行緒非阻塞i o模型 多執行緒非阻塞i o模型,reactor及其改進 前言這裡 的伺服器模型主要指的是伺服器端對i o的處理模型。從不同維度可以有不同的分類...

單執行緒併發伺服器 select

伺服器 include creatsocket.h include include include include include include include include include include include error.h define buffsize 20 extern in...