epoll的事件通知机制

epoll的事件通知机制
    LT 水平触发
        当fd有数据可读时,会重复通知多次,直到数据处理完成,是epoll的默认模式
    ET 边缘触发
        当fd有数据可读时,只通知一次,不管数据是否处理完成
            解决方案
                epoll_wait监听到fd后,判断fd没有处理完,手动执行epoll_ctl,将fd重新添加到eventpoll里
                监听到fd时,while一直读取fd,直到读完(必须是非阻塞的,否则会卡住进程)
    lt和et的区别
        当产生就绪fd时,list_head拷贝到用户空间时,会断开链表的连接,lt会判断fd是否全部读完,如果没有,重新放到list_head
        et不管有没有读完,直接不放入list_head
        本质上是一个数据是否重复消费的问题(et需要手动来解决,明显要比lt复杂)
    lt的问题
        lt会存在多次消费的惊群现象,比如多个进程都监听了epoll_wait,重新放入fd,必然会被多个监听拷贝过去,可能会重复处理
    除非特别追求性能,lt完全可以满足需求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值