水平觸發與邊緣觸發


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

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

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

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

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

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

  epoll既支持水平觸發也支持邊緣觸發,默認是水平觸發。

3.比較

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM