水平觸發(level-triggered,也被稱為條件觸發)lt:
只要滿足條件,就觸發乙個事件(只要有資料沒有被獲取,核心就不斷通知你)
邊緣觸發(edge-triggered)et:
每當狀態變化時,觸發乙個事件
「舉個讀socket的例子,假定經過長時間的沉默後,現在來了100個位元組,這時無論邊緣觸發和條件觸發都會產生乙個read ready notification通知應用程式可讀。應用程式讀了50個位元組,然後重新呼叫api等待io事件。這時條件觸發的api會因為還有50個位元組可讀從 而立即返回使用者乙個read ready notification。而邊緣觸發的api會因為可讀這個狀態沒有發生變化而陷入長期等待。 因此在使用邊緣觸發的api時,要注意每次都要讀到socket返回ewouldblock為止,否則這個socket就算廢了。而使用條件觸發的api 時,如果應用程式不需要寫就不要關注socket可寫的事件,否則就會無限次的立即返回乙個write ready notification。大家常用的select就是屬於條件觸發這一類,長期關注socket寫事件會出現cpu 100%的毛病。
水平觸發和邊緣觸發的區別
水平觸發 level triggered,也被稱為條件觸發 lt 只要滿足條件,就觸發乙個事件 只要有資料沒有被獲取,核心就不斷通知你 邊緣觸發 edge triggered et 每當狀態變化時,觸發乙個事件 舉個讀socket的例子,假定經過長時間的沉默後,現在來了100個位元組,這時無論邊緣觸...
邊緣觸發和水平觸發的區別
只要檔案描述符關聯的讀核心緩衝區非空,有資料可以讀取,就一直發出可讀訊號進行通知,當檔案描述符關聯的核心寫緩衝區不滿,有空間可以寫入,就一直發出可寫訊號進行通知 lt模式支援阻塞和非阻塞兩種方式。epoll預設的模式是lt。當檔案描述符關聯的讀核心緩衝區由空轉化為非空的時候,則發出可讀訊號進行通知,...
epoll 水平觸發和邊緣觸發的區別
epolllt 水平觸發 epollet 邊緣觸發 epoll有epolllt和epollet兩種觸發模式,lt是預設的模式,et是 高速 模式。lt模式下,只要這個fd還有資料可讀,每次 epoll wait都會返回它的事件,提醒使用者程式去操作,而在et 邊緣觸發 模式中,它只會提示一次,直到下...