29 | 渐入佳境:使用epoll和多线程模型
该思维导图由 AI 生成,仅供参考
如何切换到 epoll
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了如何使用epoll和多线程模型实现高效的网络编程。作者首先展示了如何切换到epoll,并给出了一个样例程序,演示了事件分发机制从poll切换到epoll的过程。文章强调了epoll相对于poll和select的性能优势,主要体现在事件集合和就绪列表的处理上。此外,文章还详细解释了边缘触发和条件触发的区别,并提出了两道思考题,引发读者对这些概念的深入思考。 总的来说,本文通过实例和性能分析,全面展示了epoll在高性能网络编程中的重要性和优势,对于想要深入了解网络编程技术的读者来说,是一篇非常有价值的文章。
《网络编程实战》,新⼈⾸单¥59
全部留言(22)
- 最新
- 精选
- 沉淀的梦想在ET的情况下,write ready notification只会在套接字可写的时候通知一次的话,那个时候应用还没准备好数据,等到应用准备好数据时,却又没有通知了,会不会导致数据滞留发不出去?这种情况是怎么解决的呢?
作者回复: 你可以再次注册这个write ready的事件啊,不是说只能注册一次就结束了,而是你注册了一次,它就通知你一次;而LT的情况下,可能你注册了一次,它通知你好多次。
2019-10-1519 - LiYanbin源代码看起来有点花了点时间,将这部分的代码从抽离了出来,便于大家跟踪代码理解,同时写了简单的makefile。代码地址:https://github.com/kevinrsa/epoll_server_multithreads 。如有不妥,联系删除
作者回复: makefile写得不错:)
2020-01-2914 - JJ边缘条件,当套接字缓冲区可写,会不断触发ready notification事件,不是应该条件触发才是这样吗?
作者回复: 笔误,已经让编辑勘误了,感谢指正。
2019-10-1427 - rongyefeng如果应用程序只读取了 50 个字节,边缘触发就会陷入等待; 这里的陷入等待是什么意思呢
作者回复: 不会再继续发送read_notification事件,必须等所有的100个字节被读完,才会发送下一个read_notification事件。
2020-05-2225 - 张三说老师,一直没搞懂ET和LT的性能区别,仅仅因为LT会多提醒一些次数就与ET相差明显的性能吗?一直很纠结这个问题
作者回复: 有没有跑例子程序呢?其实不用纠结,最新的测试表明,两者差别其实没有那么大。但是非要比一个差距的话,ET还是效率好一些,但是对应用程序开发者的要求高一些。
2019-12-1325 - 流浪地球细读了下老师git上的代码,套接字都是设置为非阻塞模式的,但并没有对返回值做判断处理,看上去好像是阻塞式的用法,求解?
作者回复: 可能是考虑不周,有可能的话麻烦提一个MR或者issue,大家一起来改。
2019-10-175 - 郑祖煌27章以及以后源代码的难度提升了一个等级了。看了相当吃力呀。
作者回复: 多读两遍会好很多
2020-07-0821 - Joker老师,这个就绪列表是建立在事件集合之上的对吧。
作者回复: 是的,是所有感兴趣的事件集合。
2020-04-161 - ray老师好, 针对第2题,目前想到onMessage函数应该要注意,如果当前程序无法处理该通知,应该要想办法再次注册该事件。 只是具体程序实现就不知道应该怎么写了,可能还要请老师说明一下 哈哈XD 谢谢老师^^
作者回复: 当前的实现并不会主动把I/O读写事件从事件通道上摘除哦,所以并不需要重新注册该事件,onMessage就是一个简单的报文解析函数,所要做到的就是在条件触发情况下读完所有的字节,避免不断的再次被事件驱动。
2020-04-1221 - 丁小明为什么 socket已经有缓冲区了,应用层还要缓冲区呢,比如发送,socket也会合并发送
作者回复: 很简单,应用层需要对接收到的byte字节流进行编解码,为了方便,在应用层进行缓冲,之后进行编解码的操作,再送给业务逻辑层来处理。
2020-03-1021