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