1.水平觸發level trigger lt(狀態達到)
當被監控的檔案描述符上有可讀寫事件發生時,會通知使用者程式去讀寫,如果使用者一次讀寫沒取完資料,他會一直通知使用者,如果這個描述符是使用者不關心的,它每次都返回通知使用者,則會導致使用者對於關心的描述符的處理效率降低。
復用型io中的select和poll都是使用的水平觸發方式。
2.邊緣觸發edge trigger et(狀態改變)
當被監控的檔案描述符上有可讀寫事件發生時,會通知使用者程式去讀寫,它只會通知使用者程序一次,這需要使用者一次把內容讀取玩,相對於水平觸發,效率更高。如果使用者一次沒有讀完資料,再次請求時,不會立即返回,需要等待下一次的新的資料到來時才會返回,這次返回的內容包括上次未取完的資料。
訊號驅動型io使用的是邊緣觸發方式。
epoll既支援水平觸發也支援邊緣觸發,預設是水平觸發。
3.比較
水平觸發是狀態達到後,可以多次取資料。這種模式下要注意多次讀寫的情況下,效率和資源利用率情況。
邊緣觸發是狀態改變一次,取一次資料。這種模式下讀寫資料要注意一次是否能讀寫完成。
水平觸發與邊緣觸發
今天開始封裝c的socket的基礎,在封裝的時候意識到這樣乙個問題,如果我現在fd的接收緩衝區中有2048位元組的資料,但是我唯讀出來1024個位元組的資料,當我下次select的時候 這之間沒有網路資料過來 還會檢測到該select可讀嗎?這樣就引申出來水linux的io多路復用中的水平觸發模式和...
水平觸發與邊緣觸發
水平觸發 level triggered,也稱條件觸發 select 和poll 將就緒的檔案描述符告訴程序後,如果程序沒有對其進行io操作,那麼下次呼叫select 和poll 的時候將再次報告這些檔案描述符,所以它們一般不會丟失就緒的訊息。邊緣觸發 edge triggered 只告訴程序哪些檔...
linux C epoll 水平觸發與邊緣觸發詳解
poll有兩種觸發方式 水平觸發與邊緣觸發的區別 水平觸發 只要緩衝區有資料就會一直觸發 邊沿觸發 只有在緩衝區增加資料的那一刻才會觸發 使用邊沿觸發 include include include include include int main int argc,char ar return 0...