【水平触发LT和边缘触发ET】


在I/O复用多路转接的epoll模型下,会有两种工作模式,水平ET和边缘ET触发这两种。

在这里插入图片描述

LT水平触发模式

在epoll模型中,如果是LT的水平触发模式,如果事件是就绪的,会一直通知应用层去处理就绪事件,如果一直不处理,则一直是事件就绪的状态,应用程序需要反复检查文件描述符是否可读/可写,并且对于非阻塞IO操作,可能会返回EAGAIN错误。会造成资源的浪费。只要底层的事件没有处理完,就会一直有事件就绪。支持阻塞读写和非阻塞读写。

ET边缘触发模式

ET模式中,如果有事件从无到有,或有新事件的增加,调用epoll_wait的时候,通知到应用层,应用层进行处理,在ET模式中,对新的事件只会通知生产一次,下一次如果没有新事件的到来,即使事件的数据没有处理完,下次也不会在通知上层,只有新的事件到来,epoll_wait才会在一次大的通知。所以,使用ET模式迫使上层用户尽可能的把底层的事件处理完。支持非阻塞读写。因为epoll模型默认是LT模式,所以使用ET模式,就要将事件添加EPOLLET。

ET模式如何保证就绪的事件尽可能的完成(一次性获取底层的数据)

对于底层的数据,应用层循环获取,直到数据全部获取完毕,读取数据本质就是在进行I/O处理,epoll模型是单线程的程序,进行I/O处理必然会造成阻塞,所以添加事件时候,要把事件设置为非阻塞。ET模式让底层数据被应用层一次性获取,那底层的缓冲区的空间就更多,如果使用TCP的网络连接方式,epoll模型就会告知发送方可以接受跟多的数据(因为接受缓冲区的窗口更大),这样在通信的时候,就会提高吞吐量,提高效率。而且ET模式的通知都是有效的通知,不会像LT那样,只要有事件就一直通知,减少了通知上层的次数(就是减少调用epoll_wait的系统调用),提高效率。所以ET比TL更加的高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值