epoll為什麼快

2021-07-16 19:14:53 字數 914 閱讀 8019

epoll是linux下的一種i/o多路復用的操作方式,是event poll的意思

i/o多路復用,舉個栗子,在酒吧,乙個服務員,10個顧客在喝酒,服務員有這麼幾種服務方式

服務員從第乙個顧客開始問,你要酒嗎,再問第二個,你要酒嗎,依次問下去,問完一圈,再從頭開始,服務員就是不停的在bbb,要酒嗎,要酒嗎,這種服務方式就叫做輪詢(poll)

後來,服務員生氣了,累了,就告訴顧客,你們誰要酒就喊一聲啊,我給你們倒,這樣,再沒有人要喝酒的時候,服務員就閒著了,可以幹點別的事,擦擦桌子啊,整理一下酒櫃啊,但是,這裡有個問題,就是在有人叫酒的時候,服務員不知道是誰叫的,還得從頭開始問,一直問到需要就得那個顧客,開始服務,這對應到i/o方式就是select

再後來,服務員想了乙個辦法,給每位顧客乙個號牌,誰想喝酒了,就喊一聲,把號碼帶上,這樣服務員就可以直接為這位顧客服務了,這就是epoll

epoll為什麼快

先說說傳統i/o的工作方式,當程序或者執行緒等待i/o事件的時候,程序或者執行緒就阻塞了,這種情況下乙個程序只能處理乙個i/o流,如果我需要操作多個流呢,我可以採用忙輪詢,挨個問,有流可以處理了,我就去處理,如果沒有,接著挨個問,這樣大多數時候cpu是空轉的,時間片都被浪費了

這時,我們可以想象,要是有個人能幫我看著,知道哪個流有訊息了告訴我,如果沒有,程式就阻塞,這樣也不用浪費cpu了

linux裡有兩個角色能實現這個功能,乙個叫select,乙個叫epoll

select的工作方式是這樣的,程式在select處阻塞,有i/o流滿足之後,程式會收到通知,然後可以進行處理,但是select並不知道哪個流準備好了,所以要輪詢一遍,這樣如果流多了之後,相應輪詢的處理時間也變長了,要是我能知道哪個流準備好了就好了,這時epoll出現了

epoll就可以滿足這個需求,在有流準備好的時候,我能知道是哪乙個,直接去操作他就好了

總結一下,為什麼快呢

epoll為什麼這麼快 非常形象

epoll是多路復用io i o multiplexing 中的一種方式,但是僅用於linux2.6以上核心,在開始討論這個問題之前,先來解釋一下為什麼需要多路復用io.以乙個生活中的例子來解釋.假設你在大學中讀書,要等待乙個朋友來訪,而這個朋友只知道你在a號樓,但是不知道你具體住在 於是你們約好了...

epoll為什麼比select這麼快

epoll是多路復用io i o multiplexing 中的一種方式,但是僅用於linux2.6以上核心,在開始討論這個問題之前,先來解釋一下為什麼需要多路復用io.以乙個生活中的例子來解釋.假設你在大學中讀書,要等待乙個朋友來訪,而這個朋友只知道你在a號樓,但是不知道你具體住在 於是你們約好了...

epoll為什麼快 及和select區別

epoll是多路復用io i o multiplexing 中的一種方式,但是僅用於linux2.6以上核心,在開始討論這個問題之前,先來解釋一下為什麼需要多路復用io.以乙個生活中的例子來解釋.假設你在大學中讀書,要等待乙個朋友來訪,而這個朋友只知道你在a號樓,但是不知道你具體住在 於是你們約好了...