epoll的兩種工作模式LT ET

2021-09-02 22:50:37 字數 845 閱讀 9252

之前已經介紹過了epoll的工作機制,以及它和selectpoll之間的區別,傳送門:

接下來我們詳細介紹一下它的兩種工作模式。

lt(level triggered)

lt模式,也叫做水平觸發模式。在該模式下,當有事件發生並呼叫epoll_wait後,若未及時處理,下一次呼叫epoll_wait仍會繼續通知。

內部實現方法:將從rdlist上取出的事件重新放回去,再次呼叫epoll_wait仍會繼續通知,直到使用者處理完成主動關閉fd。

在該模式下有兩種工作方式:阻塞和非阻塞。

自認為這兩種工作方式並沒有很明顯的區別,因為只要被喚醒就一定有事件可讀或者可寫,阻塞模式下,一般情況並不會進入阻塞狀態。在非阻塞模式下,會使用迴圈的方式進行讀/寫,直到完成或出現異常迴圈退出。

et(edge trigger)

et模式,也叫邊緣觸發模式,其與水平模式的區別就是,呼叫epoll_wait通知過的事件,不論是否經過處理,再次呼叫epoll_wait不會再次通知了,et模式在很大程度上降低了同乙個epoll事件被重複觸發的次數,因此et模式效率比lt模式高。

內部實現方法:呼叫epoll_waitrdlist取出事件後就不會再放回。

et模式下推薦使用非阻塞,我在這件事情上面糾結了很久,為什麼阻塞就不行呢?網上給出的答案也都模稜兩可,說阻塞模式下可能會造成永久阻塞,但是又不說明情況。思考後我的理解是這樣的:

EPOLL兩種模式

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

epoll模型有兩種工作模式

epoll模型有兩種工作模式,et和lt,兩種模式下都有一些細節值得注意,以下是一些思考 一 et模式下 q1 呼叫accept時,到底tcp完成佇列裡有多少個已經建立好的連線?這裡又得分情況來說 沒有連線。這種情況發生在tcp連線被客戶端夭折,即在服務端呼叫accept之前客戶端給出乙個rst。該...

epoll模型兩種工作模式的思考

epoll模型有兩種工作模式,et和lt,兩種模式下都有一些細節值得注意,以下是一些思考 一 et模式下 q1 呼叫accept時,到底tcp完成佇列裡有多少個已經建立好的連線?這裡又得分情況來說 解決方法 採用非阻塞的accept,在accept返回後處理econnaborted eproto e...