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術語
單線程/多線程/多進程
阻塞/掛起式阻塞/超時阻塞/非阻塞/空轉/輪詢
同步/異步/消息隊列/信號
先探測/後響應/集中探測/線程分離
併發連接數
開源/跨平臺
轉於:http://www.cnblogs.com/hnrainll/archive/2011/10/13/2210481.html