socket编程:epoll 的水平触发与边缘触发

本文详细介绍了epoll的水平触发(LT)和边缘触发(ET)两种模式。在LT模式下,只要缓冲区有数据就会持续通知,可能导致效率下降。而ET模式只在状态变化时通知,提高效率,但编程复杂度增加,需要防止事件丢失。文中通过实验展示了两种模式在读写事件处理上的差异,并讨论了ET模式下accept的处理策略,以及为何要在非阻塞模式下使用ET。最后,提出了腾讯面试中关于处理socket可写事件的两种策略。
摘要由CSDN通过智能技术生成

 

目录

1、触发定义

2、触发场景

2.1、水平触发

2.2、边缘触发

3、处理过程

3.1、LT的处理过程

3.2、ET的处理过程

4、触发模式实验

4.1、监听读事件

4.1.1、水平模式

4.1.2、边沿模式

4.2、监听写事件

4.2.1、边沿模式

4.2.2、水平模式

5、小结(重要)

5.1、ET模式下的读写实现

5.2、ET模式下的accept问题

5.3、ET模式为什么要设置在非阻塞模式下工作

5.4、LT、ET优缺点

5.5、腾讯面试题


1、触发定义

        Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你在上没读写完的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描述符,而它们每次都会返回,这样会大大降低处理程序检索自己关心的就绪文件描述符的效率!!!

        Edge_triggered(边缘触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据全部读写完(如读写缓冲区太小),那么下次调用epoll_wait()时,它不会通知你,也就是它只会通知你一次,直到该文件描述符上出现第二次可读写事件才会通知你!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老王不让用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值