ET和LT觸發方式

2021-07-27 12:18:03 字數 1394 閱讀 4689

et模式只能通過一種方式(圖中紅線)。所以et模式下能被喚醒的情況,lt模式下一定也能被喚醒。我們先來討論特殊情況(et模式),再來討論一般情況(lt模式)。

(1) 當buffer由不可讀狀態變為可讀的時候,即由空變為不空的時候。

(2) 當有新資料到達時,即buffer中的待讀內容變多的時候。

另外補充一點:

(3) 當buffer中有資料可讀(即buffer不空)且使用者對相應fd進行epoll_modin事件時。

對於情況(1)(2)分別對應圖1(a),圖1(b)。

對於寫操作

(1) 當buffer由不可寫變為可寫的時候,即由滿狀態變為不滿狀態的時候。

(2) 當有舊資料被傳送走時,即buffer中待寫的內容變少得時候。

另外補充一點:

(3) 當buffer中有可寫空間(即buffer不滿)且使用者對相應fd進行epoll_modout事件時(具體見下節內容)。

對於情況(1)(2)分別對應圖2(a),圖2(b)。

lt模式下程序被喚醒(描述符就緒)的條件就簡單多了,它包含et模式的所有條件,也就是上述列出的六中讀寫被喚醒的條件都是用於lt模式。此外,還有更普通的情況lt可以被喚醒,而et則不理會,這也是我們需要注意的情況。

對於讀操作

當buffer中有資料,且資料被讀出一部分後buffer還不空的時候,即buffer中的內容減少的時候,lt模式返回讀就緒。如下圖所示。

對於寫操作

當buffer不滿,又寫了一部分資料後扔然不滿的的時候,即由於寫操作的速度大於傳送速度造成buffer中的內容增多的時候,lt模式會返回就緒。如下圖所示。

注:poll和select都是lt模式。

epoll的 LT 條件觸發和 ET 邊緣觸發

下面是二者的定義 條件觸發 lt 只要輸入緩衝有資料就會一直通知該事件 邊緣觸發 et 輸入緩衝收到資料時僅註冊1次該事件,即使輸入緩衝中還留有資料,也不會再進行註冊 從而我要說明的是,為什麼要強調邊緣觸發要使用非阻塞io 因為在伺服器端當epoll wait監聽到有客戶端fd可讀寫時,那麼就只會返...

epoll的ET和LT的觸發events

水平觸發 對於讀操作 只要緩衝內容不為空,lt模式返回讀就緒。對於寫操作 只要緩衝區還不滿,lt模式會返回寫就緒。邊緣觸發 對於讀操作 1 當緩衝區由不可讀變為可讀的時候,即緩衝區由空變為不空的時候。2 當有新資料到達時,即緩衝區中的待讀資料變多的時候。3 當緩衝區有資料可讀,且應用程序對相應的描述...

LT模式 ET模式

lt 在資料到達之後,無論程式是沒有接收,還是接收了,但沒有接收完,下一輪epoll wait仍然會提醒應用程式該描述符上有資料,知道資料被接收完。同一事件僅僅被觸發一次 include include include include include include include include ...