epoll使用介紹

2021-04-18 04:18:56 字數 1101 閱讀 4009

linux下的epoll較之傳統的select函式比較其優點

突破了單程序開啟socket描述符最大數目的限制,select單程序開啟fd的資料是有限制的,由fd_setsize設定,預設值是2048,而這在那此需要支援上萬連線數目的網路伺服器來說是不能忍受的,雖然這個限制可以通過修改巨集重編譯核心,但這會給效率帶來急劇下降,而epoll卻沒有這個限制,理論上開啟fd的數目跟系統內在有關;

另外效率不會隨連線數的增加而線性下降,它只會對活躍的io事件進行操作,而select每次呼叫返回的是線性掃瞄的全集,不過在乙個高速的網路環境裡epoll的效能並不比select高多少,因為大部分的socket基本都是活躍的

epoll使用

epoll函式非常簡單,epoll_create,epoll_ctl,epoll_wait 3個函式,可用man檢視具體函式說明,先使用epoll_create建立乙個epoll的控制代碼,再通過epoll_ctl註冊事件,然後epoll_wait檢測事件的發生。

epoll二種工作模式的區別

edge triggered (et)、level triggered (lt);et(edge-triggered)是高速工作方式,只支援no-block socket。當io事件發生時核心通知你後不會再傳送更多的通知,一直到你執行的操作導致那個檔案描述符事件的改變,如果你不對其程序io操作,核心不會再通知你。level triggered (lt)是預設的工作方式,並且同時支援block和no-block socket.核心告訴你乙個檔案描述符是否就緒了,然後你可以對這個就緒的fd進行io操作。如果你不作任何操作,核心還是會繼續通知你的,你可以使用epolloneshot標誌來告訴核心只通知一次,需注意的是操作完後使用帶有 epoll_ctl_mod標誌epoll_ctl修改處理檔案描述符

et模式使用在epoll_ctl加入事件時使用epollet標誌來設定。et模式在io處理時需注意使用非阻塞模式,網上有很多這樣的例子

ace及libevent都使用lt模式。而ace的ace_dev_poll_reactor反應器不支援執行緒池,雖然其**裡也類似tp_reactor通過鎖來互斥epoll_wait 操作,但在多執行緒應用中會出現問題。本人參照tp_reactort自寫了乙個l/f執行緒池支援的epoll反應器,在專案中已經在使用。

epoll監聽檔案 epoll的使用

epoll i o event notification facility 在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為...

epoll使用例子

自從linux提供了 dev epoll的裝置以及後來2.6核心中對 dev epoll裝置的訪問的封裝 system epoll 之後,這種現象得到了大大的緩解,如果說幾個月前,大家還對epoll不熟悉,那麼現在來說的話,epoll的應用已經得到了大範圍的普及。那麼究竟如何來使用epoll呢?其實...

Epoll 使用示例

by fireworks foxmail.com 所謂邊沿觸發 將呼叫 epoll wait 期間的事件進行了合併,因此事件數量較多時,邊沿觸發才顯出優勢 使用udp時,如果 read 時緩衝區小於包長時,其結果是依賴於實現的,可能會導致epoll wait出錯 其他相關的背景知識,可以在網上輕鬆獲...