C 執行緒 執行緒池 epoll和IOCP之比較

2022-09-13 06:12:11 字數 1043 閱讀 8771

總結: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 ...