水平触发和边沿触发(IO复用)

2020-09-09  本文已影响0人  小幸运Q

LT(Level Trigger,水平触发)模式和ET(Edge Trigger,边沿触发)模式是两种文件描述符准备就绪的通知模式。

epoll默认是水平触发

两者的区别在哪里呢?

水平触发:读缓冲区非空就会一直触发,写缓冲区只要不满就会一直触发写事件。
边缘触发:读缓冲区空转非空(有新消息)的时候触发一次,写缓冲区从满到非满的时候(空出来可以写了)触发一次。

水平触发优、缺点及应用场景:

优点:当进行socket通信的时候,保证了数据的完整输出,进行IO操作的时候,如果还有数据,就会一直的通知你。

缺点:由于只要还有数据,内核就会不停的从内核空间转到用户空间,所有占用了大量内核资源,试想一下当有大量数据到来的时候,每次读取一个字节,这样就会不停的进行切换。内核资源的浪费严重。效率来讲也是很低的。


边沿触发优、缺点及应用场景:

优点:每次内核只会通知一次,大大减少了内核资源的浪费,提高效率。

缺点:不能保证数据的完整。不能及时的取出所有的数据。

应用场景:处理大数据。使用non-block模式的socket。

在实践中大家还是更倾向于LT,因为ET容易漏数据不安全。

上一篇 下一篇

猜你喜欢

热点阅读