epoll的ET模式和LT模式

2021-09-25 21:37:48 字數 354 閱讀 9715

lt模式:epoll預設的工作模式。如果描述符上的事件就緒,但是它的資料沒有處理完,或者沒有處理、epoll下次會提醒他,讓他處理。換個說法,如果fd對應的緩衝區有資料,就會呼叫一次epoll_wait,直到資料全部被處理完。

et模式:如果描述符上的事件就緒,但是它的資料沒有處理完,或者沒有處理。epoll下次不會提醒它,也就是說,在et模式下,epoll只會對事件提醒一次,它就必須要將全部資料處理完。換言之,每當客戶端向伺服器傳送一次資料,就呼叫一次epoll_wait,它不在乎資料是否處理完,因此它對處理資料有較高的要求。

et模式降低了epoll中事件被重複觸發的機率,因此et模式的效率較高。(epoll_wait返回的次數越多,系統呼叫的開銷越大)

epoll的ET模式和LT模式

查閱了一些資料,才知道常用的事件處理庫很多都選擇了 lt 模式,包括大家熟知的libevent和boost asio等,為什麼選擇lt呢?那就不得不從et的弊端的弊端說起。et模式下,當有事件發生時,系統只會通知你一次,也就是呼叫epoll wait 返回fd後,不管事件你處理與否,或者處理完全與否...

epoll的ET和LT模式

從man手冊中,得到et和lt的具體描述如下 epoll事件有兩種模型 edge triggered et level triggered lt 假如有這樣乙個例子 1.我們已經把乙個用來從管道中讀取資料的檔案控制代碼 rfd 新增到epoll描述符 2.這個時候從管道的另一端被寫入了2kb的資料 ...

epoll的ET模式與LT模式

1 include wrap.h 2 include 3 include 4 define max event num 1024 5 define buff size 1067 void delfd int epollfd int fd 815 void addfd int epollfd int ...