服務端執行緒模型 NIO服務模型

2022-08-24 10:42:12 字數 690 閱讀 1925

上接《服務端執行緒模型-執行緒池服務模型》(

這篇分享從最初的單執行緒服務模型一直演進到執行緒池服務模型,充分發揮出了現在多核cpu機器的優勢,但是當面對萬級別的qps時,仍然可能因為執行緒池打滿而拒絕掉大量請求。

比如可能有不少請求需要大量io資源,導致io阻塞的耗時較長,這就會導致其一直占用寶貴的執行緒池資源,導致後續的請求的響應時間長。

這時就需要使用nio服務模型了,基於selector的事件監聽機制,他會輪詢已經建立的socket,將準備好了的請求交給cpu處理,充分利用執行緒資源。

基本的**模型如下所示

while (selector.select() > 0)  

else

if (selectionkey.isreadable())

} else

if (selectionkey.iswritable())

selectionkey.cancel();

selectionkey.channel().close();

iterator.remove();

//刪除選擇鍵

} }

winsock select服務端模型

include stdafx.h include include pragma comment lib,ws2 32.lib void initsocket confirm that the winsock dll supports 2.2.note that if the dll supports...

基於NIO的伺服器模型

最簡單伺服器模型是thread per connection,即每個客戶端連線對於乙個專屬的工作執行緒,工作執行緒等待客戶端傳送資料 接收處理資料 返回響應資料然後繼續等待新的資料的到來,這種模型能夠保證很好的響應速度,但如果有大量併發連線會導致大量的工作執行緒,而且這些執行緒浪費了很多時間等待新資...

完成埠模型服務端

windows 完成埠模型服務端 include include pragma comment lib,ws2 32.lib using namespace std const int serverport 4399 const int msgsize 1024 typedef enum opera...