epoll水平模式與邊緣模式的區(qū)別
在 epoll 中,水平觸發(fā)(Level-Triggered,LT)和邊緣觸發(fā)(Edge-Triggered,ET)是兩種不同的事件觸發(fā)模式。它們的區(qū)別在于:
水平觸發(fā)模式(LT):當被監(jiān)聽的文件描述符上有可讀或可寫事件發(fā)生時,每次 epoll_wait() 調(diào)用都會返回該文件描述符上的就緒事件。如果應用程序沒有立即處理該事件,下次 epoll_wait() 調(diào)用時仍會返回該事件。也就是說,如果該文件描述符上一直有事件沒有被處理,epoll_wait() 將會一直返回該文件描述符上的事件,直到應用程序處理了該事件。
邊緣觸發(fā)模式(ET):當被監(jiān)聽的文件描述符上有可讀或可寫事件發(fā)生時,只有在該文件描述符狀態(tài)發(fā)生變化時,epoll_wait() 才會返回該事件。也就是說,如果該文件描述符上有事件未被處理,下次 epoll_wait() 只會在該文件描述符狀態(tài)發(fā)生變化時返回該事件,而不是在每次調(diào)用 epoll_wait() 時都返回該事件。
總之,水平觸發(fā)模式適合于使用阻塞 I/O 的情況,而邊緣觸發(fā)模式適合于使用非阻塞 I/O 和基于事件驅(qū)動的編程模型。邊緣觸發(fā)模式對應的處理方式更加高效,但對編程模型的要求也更高。
標簽: