水平触发和边缘触发

本文介绍了水平触发(LT)和边缘触发(ET)两种IO事件通知模式,其中LT会持续通知直到事件处理完毕,而ET只通知一次。在epoll中,两者都支持,默认为LT模式。ET模式要求一次性读取完数据,否则可能丢失,而在处理大量连接和少量活跃连接的场景中,epoll表现出色。然而,当所有连接同时活跃时,可能出现I/O压力过大的惊群问题。
摘要由CSDN通过智能技术生成

1.水平触发(LT)

当被监控的文件描述符上有可读写事件发生时,会通知用户程序去读写,他会一直通知用户,如果这个描述符是用户不关心的,它每次都返回通知用户,则会导致用户对于关心的描述符的处理效率降低。

复用型IO中的select和poll都是使用的水平触发模式。

2.边缘触发(ET)

当被监控的文件描述符上有可读写事件发生时,会通知用户程序去读写,它只会通知用户进程一次,这需要用户一次把内容读取完,相当于水平触发,效率更高。如果用户一次没有读完数据,再次请求时,不会立即返回,需要等待下一次的新的数据到来时才会返回,这次返回的内容包括上次未取完的数据

epoll既支持水平触发也支持边缘触发,默认是水平触发。

3.比较

水平触发是状态达到后,可以多次取数据。这种模式下要注意多次读写的情况下,效率和资源利用率情况。

边缘触发数状态改变一次,取一次数据。这种模式下读写数据要注意一次是否能读写完成。

4.ET模式带来的问题

  1. 因为只有当缓冲区中数据由无到有,由少变多时才会区读取数据,
    所以一次要将缓冲区中的数据读完,否则剩下的数据可能就读不到了。
    正常的读取数据时,我们若是要保证一次把缓冲区的数据读完,意为本次读被阻塞时即缓冲区中没有数据了,可是我们 epoll 服务器要处理多个用户的请求,read()不能被阻塞,所以采用非阻塞轮询的方式读取数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值