1. 程式人生 > >水平觸發與邊緣觸發

水平觸發與邊緣觸發

1.水平觸發level trigger  LT(狀態達到)

  當被監控的檔案描述符上有可讀寫事件發生時,會通知使用者程式去讀寫,如果使用者一次讀寫沒取完資料,他會一直通知使用者,如果這個描述符是使用者不關心的,它每次都返回通知使用者,則會導致使用者對於關心的描述符的處理效率降低。

  複用型IO中的select和poll都是使用的水平觸發方式。

2.邊緣觸發edge trigger  ET(狀態改變)

  當被監控的檔案描述符上有可讀寫事件發生時,會通知使用者程式去讀寫,它只會通知使用者程序一次,這需要使用者一次把內容讀取玩,相對於水平觸發,效率更高。如果使用者一次沒有讀完資料,再次請求時,不會立即返回,需要等待下一次的新的資料到來時才會返回,這次返回的內容包括上次未取完的資料。

  訊號驅動型IO使用的是邊緣觸發方式。

  epoll既支援水平觸發也支援邊緣觸發,預設是水平觸發。

3.比較

  水平觸發是狀態達到後,可以多次取資料。這種模式下要注意多次讀寫的情況下,效率和資源利用率情況。

       邊緣觸發是狀態改變一次,取一次資料。這種模式下讀寫資料要注意一次是否能讀寫完成。