epoll兩種觸發模式

2021-10-08 21:08:56 字數 1589 閱讀 5996

二、詳細**

三、測試效果

lt(level triggered):lt是預設的工作方式,並且同時支援block和no-block socket。在這種做法中,核心告訴你乙個檔案描述符是否就緒了,然後你可以對這個就緒的fd進行io操作。如果你不作任何操作,核心還是會繼續通知你的,所以,這種模式程式設計出錯誤可能性要小一點。傳統的select/poll都是這種模型的代表。

當快取區的資料沒有被一次性讀取完,那麼epoll_wait()函式會非阻塞的進行再次讀取,直至讀寫快取區的資料被讀取完成。

et(edge-triggered):et是高速工作方式,只支援no-block socket。在這種模式下,當描述符從未就緒變為就緒時,核心通過epoll告訴你。然後它會假設你知道檔案描述符已經就緒,並且不會再為那個檔案描述符傳送更多的就緒通知。請注意,如果一直不對這個fd作io操作(從而導致它再次變成未就緒),核心不會傳送更多的通知(only once).

用fcntl設定阻塞。

flag =

fcntl

(connfd, f_getfl)

;/* 修改connfd為非阻塞讀 */

flag |

= o_nonblock;

fcntl

(connfd, f_setfl, flag)

; event.events = epollin | epollet;

/* et模式 */

每當進行一次讀取操作後,epoll_wait()函式就會堵塞,直至下一次快取區資料的寫入,才會在此的觸發讀取操作。

區別:對於lt模式,保證了對資料的完整性讀取,但是對一些不重要的不必要的資料來說,會加大核心對epoll_wait()函式的呼叫,加大開銷。對於et模式,可以在程式中設定讀取的關鍵資訊段,從而來減輕核心的開銷,效率而言相比lt來說較高。但是值得注意的是讀取快取區需要及時將多餘的資訊清理掉,保證下一次讀取的可靠性。

EPOLL兩種模式

select epoll 的特點 select 的特點 select 選擇控制代碼的時候,是遍歷所有控制代碼,也就是說控制代碼有事件響應時,select 需要遍歷所有控制代碼才能獲取到哪些控制代碼有事件通知,因此效率是非常低。但是如果連線很少的情況下,select 和epoll的lt 觸發模式相比,...

epoll兩種模式(lt et)複習

最近又在複習一些基礎知識,現在看看epoll的相關知識點。兩種模式 簡單理解 lt 水平觸發 對於採用lt工作模式的檔案描述符,當epoll wait檢測到其上有事件發生並將此事件通知應用程式後,應用程式可以不立即處理該事件,當應用程式下一次呼叫epoll wait時,epoll waite還會再次...

epoll的兩種模式 LT ET

關於epoll的兩種工作模式 lt level trigger,電平觸發 模式 et edge trigger,邊沿觸發 模式。et模式在很大程度上降低了同乙個 epoll 事件被重複觸發的次數。用以下 測試 lt et在工作方式上的差異。include include include includ...