epoll 水平觸發和邊緣觸發的區別

2021-07-25 09:16:00 字數 275 閱讀 5321

epolllt——水平觸發

epollet——邊緣觸發

epoll有epolllt和epollet兩種觸發模式,lt是預設的模式,et是「高速」模式。lt模式下,只要這個fd還有資料可讀,每次 epoll_wait都會返回它的事件,提醒使用者程式去操作,而在et(邊緣觸發)模式中,它只會提示一次,直到下次再有資料流入之前都不會再提示了,無 論fd中是否還有資料可讀。所以在et模式下,read乙個fd的時候一定要把它的buffer讀光,也就是說一直讀到read的返回值小於請求值,或者 遇到eagain錯誤。

epoll 水平觸發 邊緣觸發

水平觸發 只要緩衝區還有資料,核心就還會通知使用者。使用者如果第一次讀取資料沒讀完,即使沒有任何新的操作觸發,還是可以繼續通過epoll wait來獲取事件 邊緣觸發 只有當新事件觸發的時候,才能通過epoll wait來獲取資料,如果第一次讀取資料沒讀完,就只能等待下一次事件觸發來獲取餘下的資料。...

epoll 水平觸發 邊緣觸發

先簡單比較一下level trigger 和 edge trigger 模式的不同。讓我們換乙個角度來理解et模式,事實上,epoll的et模式其實就是socket io完全狀態機。當socket由不可讀變成可讀時,epoll的et模式返回read 事件。對於read 事件,開發者需要保證把讀取緩衝...

epoll的水平觸發和邊緣觸發

即level triggered and edge triggered 簡單說來 level triggered 只要事件是處於就緒狀態,你每詢問一次,就告訴你一次它處於就緒狀態。edge triggered 只有在狀態改變的時候告訴你,這也是為什麼et模式下,建議用非阻塞的socket。下面我們來...