问题:关于 epoll 和 select 的区别,哪些说法是正确的?(多选)
A. epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听多个 I/O 事件的状态。
B. epoll 相比 select 效率更高,主要是基于其操作系统支持的I/O事件通知机制,而 select 是基于轮询机制。
C. epoll 支持水平触发和边沿触发两种模式。
D. select 能并行支持 I/O 比较小,且无法修改。
出题人:阿里巴巴出题专家:寈峰/阿里技术专家
参考答案:A,B,C
【延伸】那在高并发的访问下,epoll使用那一种触发方式要高效些?当使用边缘触发的时候要注意些什么东西?
延伸(最后添加的):
et模式(边缘触发)效率会高,因为只会触发一次,每个操作尽量做完,
读,只要还有数据就继续读;写,只要还有空间,还有未写数据,就继续写。
其实对lt和et的了解并不多,只能从网上搜索一些答案
- select和epoll都是网络i/o复用的一种,都是系统调用
- 本题主要考题范围是对多路复用的了解和多路复用的几种实现方式
- 熟悉网络i/o复用相关的概念(多路复用/事件循环/io模型)
- 熟悉select/pselelct/poll/epoll
- 熟悉其差异
- 这些问题都可以从wiki和书本上找到答案
- 了解多路复用, 详见yb-post issue[#48]
- 了解事件循环
- 了解io模型和各个系统调用函数
- 回答问题
这个属于多看就能回答的问题,select支持io复用,所以不存在并发小的问题, 至少是可以上千个socket的。
本次问题的答案来至wiki/书本/网络。每种途径都只包含了一部分答案, 组合起来就是完整的答案。所以学习过程中,多读书是很有必要的。
2019.11.01
本次解决问题从很早就开始了,只是看文档花了很多时间(正好也有时间来了解), 有一点需要注意:wiki是一个很好的知识库,以后需要多多善用, 书本上的知识也很详细,不过不会涵盖所有,所以网络上查找资料也是非常有必要的。
先了解基础和环境,再去了解具体的技术实现,非常有必要。