總結:iocp :我的列印檔案放在店裡面排隊,輪到我列印了,店長幫我列印一下,列印好了通知我來拿
epoll :我的列印檔案放在店裡面排隊,輪到我叫我一下,我自己來列印。
直入正題:
epoll 是linux系統下的模型;iocp 是windows下模型;
epoll 是當事件資源滿足時發出可處理通知訊息;
iocp 則是當事件完成時發出完成通知訊息;
從應用程式的角度來看, epoll 是同步非阻塞的;iocp是非同步操作;
舉例說明,更加清晰透徹:
有乙個列印店,有一台印表機,好幾個人在排隊列印。
普通列印店,正常情況是:
1、你準備好你的文件,來到列印店;
2、排隊,等別人列印完;
3、輪到你了,列印你的文件;
4、你取走文件,做後面的處理。
這種方式,你會浪費很多等待時間,非常低效。
於是, linux和windows都提出了自己最優的模型。
linux的epoll模型,則可以描述如下:
1、你準備好你的文件,來到列印店;
2、告訴店小二說,我先排隊在這位置,輪到我了通知一聲(假定你來回路上不耗時);
3、你先去忙你的事情去了;
4、輪到你了,店小二通知你(假定你來回路上不耗時);
5、你獲得印表機使用權了,開始列印;
6、列印完了拿走。
你會發現,你節省了排隊的時間,等到你能獲得印表機資源的時候,告訴你來處理。但是這裡,就浪費了一點時間,就是你自己列印。這就是epoll的同步非阻塞。
windows的iocp模型,則可以描述如下:
1、你準備好你的文件,來到列印店;
2、告訴店小二說,我先排隊,輪到我了幫列印下,好了通知我(也假定你來回路上不耗時);
3、你先去忙你的事情去了;
4、輪到你的文件了,店小二直接幫你列印好了,通知你;
5、你來了,直接取走文件。
你會發現,你不但節省了排隊時間,你連列印時間都節省了, 完全非同步操作。
很顯然,iocp簡直是太完美了,可以稱得上是最高效能的伺服器網路模型了。
epoll 執行緒池
epoll是linux下高併發伺服器的完美方案,因為是基於事件觸發的,所以比select快的不只是乙個數量級。單執行緒epoll,觸發量可達到15000,但是加上業務後,因為大多數業務都與資料庫打交道,所以就會存在阻塞的情況,這個時候就必須用多執行緒來提速。測試工具 stressmark 因為加了適...
c 執行緒 執行緒池和Task關係
環境 執行緒 thread,由clr提供,可以提供細粒度的執行緒控制,但是在返回值 多個執行緒並行 序列時候顯得功能不足,需要進一步封裝才行,而且執行緒的開啟 停止都需要時間開銷,亂用的話還造成浪費。執行緒池 threadpool,由clr提供,提供粗粒度的執行緒控制,主要用來執行短時間內執行的 片...
c 執行緒池 多執行緒
1。設定引數類 using system using system.collections.generic using system.text public class stateinfo 執行緒開啟方法類 using system using system.collections.generic ...