epoll的ET和LT两种模式对比及注意事项

ET模式:

因为ET模式只有从unavailable到available才会触发,所以

1、读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小;

如果应用层读缓冲区满:那就需要应用层自行标记,解决OS不再通知可读的问题

2、写事件:需要使用while循环写到EAGAIN,也可以写到返回值小于缓冲区大小

如果应用层写缓冲区空(无内容可写):那就需要应用层自行标记,解决OS不再通知可写的问题。

 

LT模式:

因为LT模式只要available就会触发,所以:

1、读事件:因为一般应用层的逻辑是“来了就能读”,所以一般没有问题,无需while循环读取到EAGAIN;

如果应用层读缓冲区满:就会经常触发,解决方式如下;

2、写事件:如果没有内容要写,就会经常触发,解决方式如下。

 

LT经常触发读写事件的解决办法:修改fd的注册事件,或者把fd移出epollfd。

 

总结:

目前好像还是LT方式应用较多,包括redis、libuv等。(nginx使用ET)

LT模式的优点在于:事件循环处理比较简单,无需关注应用层是否有缓冲或缓冲区是否满,只管上报事件。缺点是:可能经常上报,可能影响性能。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值