技術派 epoll和IOCP之比較

2021-10-02 20:10:47 字數 1413 閱讀 9289

直入正題

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就比iocp效率高了?不一定。

同樣是以列印為例

假定現在有兩個列印店,分別命名為:

epoll列印店(l店), iocp列印店(w店)

你把相同的材料兩份,分別放在兩個店,哪乙個會先完成呢?

如果l店的工作人員,工作效率非常高,很快就輪到你列印了。

而w店的工作人員,慢慢悠悠,邊工作邊吃飯邊聊天,很久才輪到你的列印。

請問:那個會先列印完?

所以,誰更快,還與列印店的工作方式有很大關係。

回到本話題,決定效率快慢的,模型是一方面,作業系統的底層協議處理架構,也是一方面。

兩者同樣重要。

當然你也可以說,也很有可能是,l店的印表機是時速30張/分鐘,w店印表機時速120張/分鐘,這個就屬於硬體配置了。

這就等於是i9處理器與二十年前的賽揚ii處理器在比較了。

IOCP模型和EPOLL模型的比較

iocp模型與epoll模型的比較 iocp i o completion port 常稱i o完成埠。iocp模型屬於一種通訊模型,適用於 能控制併發執行的 高負載伺服器的乙個技術。通俗一點說,就是用於高效處理很多很多的客戶端進行資料交換的乙個模型。或者可以說,就是能非同步i o操作的模型。三 網...

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

總結 iocp 我的列印檔案放在店裡面排隊,輪到我列印了,店長幫我列印一下,列印好了通知我來拿 epoll 我的列印檔案放在店裡面排隊,輪到我叫我一下,我自己來列印。直入正題 epoll 是linux系統下的模型 iocp 是windows下模型 epoll 是當事件資源滿足時發出可處理通知訊息 i...

IOCP模型與EPOLL模型的比較

一 iocp和epoll之間的異同。異 1 iocp是windows系統下使用。epoll是linux系統下使用。2 iocp是io操作完畢之後,通過get函式獲得乙個完成的事件通知。epoll是當你希望進行乙個io操作時,向epoll查詢是否可讀或者可寫,若處於可讀或可寫狀態後,epoll會通過e...