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

2021-10-02 16:32:14 字數 1034 閱讀 8830

只要檔案描述符關聯的讀核心緩衝區非空,有資料可以讀取,就一直發出可讀訊號進行通知,

當檔案描述符關聯的核心寫緩衝區不滿,有空間可以寫入,就一直發出可寫訊號進行通知

lt模式支援阻塞和非阻塞兩種方式。epoll預設的模式是lt。

當檔案描述符關聯的讀核心緩衝區由空轉化為非空的時候,則發出可讀訊號進行通知,

當檔案描述符關聯的核心寫緩衝區由滿轉化為不滿的時候,則發出可寫訊號進行通知

兩者的區別在**呢?水平觸發是只要讀緩衝區有資料,就會一直觸發可讀訊號,而邊緣觸發僅僅在空變為非空的時候通知一次。

lt(level triggered)是預設的工作方式,並且同時支援block和no-block socket.在這種做法中,核心告訴你乙個檔案描述符是否就緒了,然後你可以對這個就緒的fd進行io操作。如果你不作任何操作,核心還是會繼續通知你的,所以,這種模式程式設計出錯誤可能性要小一點。傳統的select/poll都是這種模型的代表.

官:1.讀緩衝區剛開始是空的

2.讀緩衝區寫入2kb資料

3.水平觸發和邊緣觸發模式此時都會發出可讀訊號

4.收到訊號通知後,讀取了1kb的資料,讀緩衝區還剩餘1kb資料

5.水平觸發會再次進行通知,而邊緣觸發不會再進行通知

所以,邊緣觸發需要一次性的把緩衝區的資料讀完為止,也就是一直讀,直到讀到egain為止,egain說明緩衝區已經空了,因為這一點,邊緣觸發需要設定檔案控制代碼為非阻塞

白:epoll的兩種工作方式:1.水平觸發(lt)2.邊緣觸發(et)

lt模式:若就緒的事件一次沒有處理完要做的事件,就會一直去處理。即就會將沒有處理完的事件繼續放回到就緒佇列之中(即那個核心中的鍊錶),一直進行處理。

et模式:就緒的事件只能處理一次,若沒有處理完會在下次的其它事件就緒時再進行處理。而若以後再也沒有就緒的事件,那麼剩餘的那部分資料也會隨之而丟失。

由此可見:et模式的效率比lt模式的效率要高很多。只是如果使用et模式,就要保證每次進行資料處理時,要將其處理完,不能造成資料丟失,這樣對編寫**的人要求就比較高。

注意:et模式只支援非阻塞的讀寫:為了保證資料的完整性。

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

水平觸發 level triggered,也被稱為條件觸發 lt 只要滿足條件,就觸發乙個事件 只要有資料沒有被獲取,核心就不斷通知你 邊緣觸發 edge triggered et 每當狀態變化時,觸發乙個事件 舉個讀socket的例子,假定經過長時間的沉默後,現在來了100個位元組,這時無論邊緣觸...

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

水平觸發 level triggered,也被稱為條件觸發 lt 只要滿足條件,就觸發乙個事件 只要有資料沒有被獲取,核心就不斷通知你 邊緣觸發 edge triggered et 每當狀態變化時,觸發乙個事件 舉個讀socket的例子,假定經過長時間的沉默後,現在來了100個位元組,這時無論邊緣觸...

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

epolllt 水平觸發 epollet 邊緣觸發 epoll有epolllt和epollet兩種觸發模式,lt是預設的模式,et是 高速 模式。lt模式下,只要這個fd還有資料可讀,每次 epoll wait都會返回它的事件,提醒使用者程式去操作,而在et 邊緣觸發 模式中,它只會提示一次,直到下...