epoll的两种工作模式

前言


epollLinux下的一个多路复用API,当处理大并发的事件时,其性能远强于古老的pollselectepoll可以工作在两种模式下,LT(水平触发)、ET(边缘触发),接下来将讨论这两种模式的区别。

ET(边缘触发)和LT(水平触发)


默认情况下,epoll采用LT模式工作,该模式支持阻塞和非阻塞套接字,如果想采用ET模式,可以使用EPOLLET参数。ET模式只支持非阻塞套接字,其效率要高于LT模式,两者的区别在于,当一个新的事件到来时,LTET模式下都可以通过epoll_wait方法来获取到这个事件,但是如果这次没有把这个事件对应的套接字缓冲区处理完,在这个套接字没有新的事件再次到来时,在ET模式下是无法再次从epoll_wait方法中获取到这个事件的;而LT模式则可以再次获取到,进而再次进行处理,其只要一个事件对应的套接字缓冲区还有数据,就总能从epoll_wait中获取到这个事件,因此,如果采用ET模式进行开发时,要特别注意,如果没有彻底的将缓冲区中的数据处理完,则会导致缓冲区中的用户请求得不到响应。