epoll的ET。 分别是边缘触发(edge-triggered,ET)和水平触发(level-triggered,LT)。

  • 使用边缘触发模式时,当被监控的 Socket 描述符上有可读事件发生时,服务器端只会从 epoll_wait 中苏醒一次,即使进程没有调用 read 函数从内核读取数据,也依然只苏醒一次,因此我们程序要保证一次性将内核缓冲区的数据读取完;对于边缘触发模式,只有一个事件从无到有才会触发除非再新来一次数据,因此,在边缘触发模式下,需要使用非阻塞I/O操作来确保读取完所有的数据。
  • 使用水平触发模式时,当被监控的 Socket 上有可读事件发生时,服务器端不断地从 epoll_wait 中苏醒,直到内核缓冲区数据被 read 函数读完才结束,目的是告诉我们有数据需要读取;对于水平触发模式,一个事件只要有,就会一直触发;

epoll 支持边缘触发和水平触发的方式,而 select/poll 只支持水平触发,一般而言,边缘触发的方式会比水平触发的效率高

你可能感兴趣的:(服务器,网络,linux)