对epoll
的两种模式做一个小结,其中也给出一些实例。
LT模式
LT
(Level Trigger, 水平触发模式):LT
是epoll
默认的模式,这种模式下epoll
相当于一个效率较高的poll
。
socket
接收缓冲区不为空,有数据可读,一直触发读事件。
socket
发送缓冲区不为满,可以继续写入数据,一直触发写事件。
ET模式
ET
(Edge Trigger, 边沿触发模式):ET
是一种高效工作模式。
socket
接收缓冲区状态发生变化触发读事件,即空的接收缓冲区刚接收到数据是触发读事件。
socket
发送缓冲区的状态发生变化触发写事件, 即满的缓冲区刚腾出空间时触发写事件。
1 |
|
- 上图
LT
模式触发了两次.因为设置buf
设置的是10个字节(减去一个’\0’),故触发两次。
- 上图
ET
模式触发了一次.
PS:ET模式的时候必须使用非阻塞的套接字,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。