直入正題
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...