ET模式下EPOLLIN和EPOLLOUT同時返回

2021-09-13 03:26:30 字數 276 閱讀 1885

et模式下

這是自己實驗時,發生的乙個現象,同時註冊epollin和epollout事件,當讀事件就緒時,返回的flag帶有epollin和epollout。

對於我們來說,判斷讀事件和寫事件就緒的條件是reported後的flag。現在et模式下。當讀事件由低電平到高電平時,讀事件就緒,可以理解。但寫事件由高電平還是高電平,卻觸發。那麼就會導致我們判斷錯誤

讀寫分離。即註冊完讀事件後,再去註冊寫事件。

即add–epollin–mod–epollout–mod–epollin

epoll的ET模式和LT模式

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

epoll的ET模式和LT模式

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

epoll的ET和LT模式

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