1、單執行緒/阻塞/同步模型
適用範圍:單一連線
缺點:多連線時相互影響,乙個阻塞,別的也得不到響應
2、多程序/阻塞/同步模型
適用範圍:連線數較少,且使用的資源較多,比如檔案操作
缺點:系統程序數有上限,不適用大量併發連線,且程序間切換開銷較大
3、多執行緒/阻塞/同步模型
適用範圍:連線數較少,且使用系統資源不多,可多個執行緒共享
缺點:系統執行緒數有上限,不適用大量併發連線,且執行緒間的需要保護
4、單執行緒/非阻塞/同步模型
特徵:強行逐個連線輪詢處理,沒有探測
適用範圍:連線數較少
缺點:需要處理資料的拼接,且憑空占用資源,cpu高
5、select事件驅動模型(單執行緒/阻塞/同步模型/先探測後處理/掛起式阻塞)
特徵:事件驅動,先集中探測事件,再對有事件的連線逐一響應
適用範圍:連線數中
缺點:探測效率不高,且探測和處理處於同一執行緒,處理時間較長時容易影響探測;
6、平台相關的驅事件驅動(雙線程/阻塞/非同步模型/先探測後處理/掛起式阻塞/探測和響應執行緒分離)
特徵:使用特殊平台自身的介面,linux為poll、epoll,bsd為kqueue、solaris為/dev/poll、windows為iocp;
適用範圍:大量併發連線
優點:使用訊息佇列或訊號等方式將事件探測和響應分離在不同執行緒,從而確保事件探測不會被響應影響;
探測和響應的執行緒都使用了掛起機制,從而有效防止了執行緒空轉,只占用很少的資源;
缺點:難於跨平台
7、開源跨平台事件驅動模型(雙線程/阻塞/非同步模型/先探測後處理/掛起式阻塞/探測和響應執行緒分離)
適用範圍:大量併發連線
優點:跨平台
缺點:需要第三方開源庫來移植和封裝平台
開源例子:libev、libevent、ace、asio
8、事件驅動模型的抽象
最大限度地利用網路本身的併發能力;
本地資源不能成為網路併發瓶徑;
多個連線之間不能相互阻塞;
事件響應不能阻塞事件探測;
執行緒無任務時不能空轉;
9、網路i/o術語
單執行緒/多執行緒/多程序
阻塞/掛起式阻塞/超時阻塞/非阻塞/空轉/輪詢
同步/非同步/訊息佇列/訊號
先探測/後響應/集中探測/執行緒分離
併發連線數
開源/跨平台
轉於:
高效併發伺服器模型
1 單執行緒 阻塞 同步模型 適用範圍 單一連線 缺點 多連線時相互影響,乙個阻塞,別的也得不到響應 2 多程序 阻塞 同步模型 適用範圍 連線數較少,且使用的資源較多,比如檔案操作 缺點 系統程序數有上限,不適用大量併發連線,且程序間切換開銷較大 3 多執行緒 阻塞 同步模型 適用範圍 連線數較少...
常見併發伺服器模型
1 短連線 如果是長連線則需要在read與write之間增加乙個迴圈,那樣的話外層迴圈無法退出,接收不到其它連線請求,即只能服務乙個客戶端 2 單執行緒,無法充分利用多核cpu 3 不適合執行時間較長的服務 encode compute decode執行時間過長會影響其他客戶端連線的響應速度 1 長...
併發伺服器模型 單程序伺服器
from socket import sersocket socket af inet,sock stream 重複使用繫結的資訊 sersocket.setsockopt sol socket,so reuseaddr 1 localaddr 7788 sersocket.bind localad...