epoll的三种工作模式

2020-11-18  本文已影响0人  StevenHD

epoll_wait()是中间层,它表示linux内核帮我们做检测——


epoll_wait()工作示意图

一、水平触发模式——LT

  • 可以根据来解释
  • 可以观察epoll_wait()的返回次数,重点是【返回次数】和【发送数据的次数】没有任何关系,比如发送了100个byte的数据,但是接收一次只能接收5个byte,那么返回次数会是20次,但是发送数据的次数只有1次。

二、边沿触发模式——ET

本质上是【边沿阻塞触发】,因为fd默认是【阻塞】的,就算为了可以读取完数据,加一个while(recv()),但是当数据读完的时候,是会阻塞的——等待新的数据,所以为了解决阻塞问题,我们可以【设置非阻塞FD】。

client给server发数据,发送一次epoll_wait就返回一次,不在乎这一次能不能把数据读完

三、边沿非阻塞模式

如何设置非阻塞?

  1. open(),因为open中有flags——将其设置成O_WDRW | O_NONBLOCK
  2. fcntl(),修改FD的flag属性

将缓冲区的全部数据都读出

上一篇下一篇

猜你喜欢

热点阅读