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