我是靠谱客的博主 大气泥猴桃,最近开发中收集的这篇文章主要介绍epoll模型水平触发、边沿触发优缺点对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

epoll模式下的水平触发、边沿触发

1,epoll默认是水平触发

2,水平触发通俗来讲:只要有数据,epoll_wait函数就一直返回;边沿触发通俗来讲:只有socket状态发生变化,epoll_wait函数才会返回。

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

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

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

应用场景:

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

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

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

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

总结:

如果我们用水平触发不用担心数据有没有读完因为下次epoll返回时,没有读完的socket依然会被返回,但是要注意这种模式下的写事件,因为是水平触发,每次socket可写时epoll都会返回,当我们写的数据包过大时,一次写不完,要多次才能写完或者每次socket写都写一个很小的数据包时,每次写都会被epoll检测到,因此长期关注socket写事件会无故cpu消耗过大甚至导致cpu跑满,所以在水平触发模式下我们一般不关注socket可写事件而是通过调用socket write或者send api函数来写socket,说到这我们可以看到这种模式在效率上是没有边缘触发高的,因为每个socket读或者写可能被返回两次甚至多次,所以有时候我们也会用到边缘触发但是这种模式下在读数据的时候一定要注意,因为如果一次可写事件我们没有把数据读完,如果没有读完,在socket没有新的数据可读时epoll就不回返回了,只有在新的数据到来时,我们才能读取到上次没有读完的数据。

最后

以上就是大气泥猴桃为你收集整理的epoll模型水平触发、边沿触发优缺点对比的全部内容,希望文章能够帮你解决epoll模型水平触发、边沿触发优缺点对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部