之前已經介紹過了epoll
的工作機制,以及它和select
,poll
之間的區別,傳送門:
接下來我們詳細介紹一下它的兩種工作模式。
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_wait
從rdlist
取出事件後就不會再放回。
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...