分析了ET和LT的實作方式,那麼分析他們的觸發方式就容易多了。我們通過實作分析知道LT模式下epoll_wait被喚醒可以通過兩種方式(圖中紅線和藍線),而ET模式隻能通過一種方式(圖中紅線)。是以ET模式下能被喚醒的情況,LT模式下一定也能被喚醒。我們先來讨論特殊情況(ET模式),再來讨論一般情況(LT模式)。
根據上一節對兩種加入rdlist途徑的分析,可以得出ET模式下被喚醒(傳回就緒)的條件為:
l 對于讀取操作:
(1) 當buffer由不可讀狀态變為可讀的時候,即由空變為不空的時候。
(2) 當有新資料到達時,即buffer中的待讀内容變多的時候。
另外補充一點:
(3) 當buffer中有資料可讀(即buffer不空)且使用者對相應fd進行epoll_mod IN事件時(具體見下節内容)。
對于情況(1)(2)分别對應圖1(a),圖1(b)。
l 對于寫操作:
(1) 當buffer由不可寫變為可寫的時候,即由滿狀态變為不滿狀态的時候。
(2) 當有舊資料被發送走時,即buffer中待寫的内容變少得時候。
(3) 當buffer中有可寫空間(即buffer不滿)且使用者對相應fd進行epoll_mod OUT事件時(具體見下節内容)。
對于情況(1)(2)分别對應圖2(a),圖2(b)。

(a) (b)
圖1 ET讀觸發的兩種情況
圖2 LT寫觸發的兩種情況
LT模式下程序被喚醒(描述符就緒)的條件就簡單多了,它包含ET模式的所有條件,也就是上述列出的六中讀寫被喚醒的條件都是用于LT模式。此外,還有更普通的情況LT可以被喚醒,而ET則不理會,這也是我們需要注意的情況。
l 對于讀操作
當buffer中有資料,且資料被讀出一部分後buffer還不空的時候,即buffer中的内容減少的時候,LT模式傳回讀就緒。如下圖所示。
l 對于寫操作
當buffer不滿,又寫了一部分資料後扔然不滿的的時候,即由于寫操作的速度大于發送速度造成buffer中的内容增多的時候,LT模式會傳回就緒。如下圖所示。
注:poll和select都是LT模式。