EPOLL兩種模式

2021-09-30 11:55:48 字數 1380 閱讀 8764

select/epoll

的特點

select

的特點:

select

選擇控制代碼的時候,是遍歷所有控制代碼,也就是說控制代碼有事件響應時,

select

需要遍歷所有控制代碼才能獲取到哪些控制代碼有事件通知,因此效率是非常低。但是如果連線很少的情況下,

select

和epoll的lt

觸發模式相比,

效能上差別不大。

這裡要多說一句,

select

支援的控制代碼數是有限制的,

同時只支援

1024

個,這個是控制代碼集合限制的,如果超過這個限制,很可能導致溢位,而且非常不容易發現問題,

taf就出現過這個問題,

除錯了n

天,才發現:)當然可以通過修改

linux

的socket

核心調整這個引數。

epoll

的特點:

epoll

對於控制代碼事件的選擇不是遍歷的,是事件響應的,就是控制代碼上事件來就馬上選擇出來,不需要遍歷整個控制代碼鍊錶,因此效率非常高,核心將控制代碼用紅黑樹儲存的。

對於epoll

而言還有et和

lt的區別,

lt表示水平觸發,

et表示邊緣觸發,兩者在效能以及**實現上差別也是非常大的。

epoll的lt

和et的區別

lt:水平觸發,

效率會低於

et觸發,尤其在大併發,大流量的情況下。但是

lt對**編寫要求比較低,不容易出現問題。

lt模式服務編寫上的表現是:只要有資料沒有被獲取,核心就不斷通知你,因此不用擔心事件丟失的情況。

et:邊緣觸發,

效率非常高,在併發,大流量的情況下,會比

lt少很多

epoll

的系統呼叫,因此效率高。但是對程式設計要求高,需要細緻的處理每個請求,否則容易發生丟失事件的情況。

下面舉乙個列子來說明lt和

et的區別(都是非阻塞模式,阻塞就不說了,效率太低):

採用lt

模式下,

如果accept

呼叫有返回就可以馬上建立當前這個連線了,再

epoll_wait

等待下次通知,和

select

一樣。但是對於

et而言,如果

accpet

呼叫有返回,除了建立當前這個連線外,不能馬上就

epoll_wait

還需要繼續迴圈

accpet

,直到返回

-1,且

errno==eagain

,taf

裡面的示例**:

epoll兩種觸發模式

二 詳細 三 測試效果 lt level triggered lt是預設的工作方式,並且同時支援block和no block socket。在這種做法中,核心告訴你乙個檔案描述符是否就緒了,然後你可以對這個就緒的fd進行io操作。如果你不作任何操作,核心還是會繼續通知你的,所以,這種模式程式設計出錯...

epoll兩種模式(lt et)複習

最近又在複習一些基礎知識,現在看看epoll的相關知識點。兩種模式 簡單理解 lt 水平觸發 對於採用lt工作模式的檔案描述符,當epoll wait檢測到其上有事件發生並將此事件通知應用程式後,應用程式可以不立即處理該事件,當應用程式下一次呼叫epoll wait時,epoll waite還會再次...

epoll的兩種模式 LT ET

關於epoll的兩種工作模式 lt level trigger,電平觸發 模式 et edge trigger,邊沿觸發 模式。et模式在很大程度上降低了同乙個 epoll 事件被重複觸發的次數。用以下 測試 lt et在工作方式上的差異。include include include includ...