这篇文章主要讲解一下IO多路复用常见问题,包含常见面试题,对你有帮助的话可以留个赞和关注嘛?谢谢大家支持!
1.epoll 相比于 select/poll 的优点有哪些?
- 高效的数据结构:epoll使用红黑树管理fd,查询效率O(logN),而select/poll是线性扫描O(N)
- 事件驱动机制:epoll只返回就绪的fd,避免无效遍历;select/poll每次都要传递全部fd并轮询
- 无数量限制:epoll没有fd数量限制(仅受系统资源限制),而select通常限制1024个
2.epoll为什么高效?
- 使用红黑树存储fd,查找高效
- 只返回就绪的fd,避免无效遍历
- 内核与用户空间共享内存,减少数据拷贝
3.水平触发(LT)和边缘触发(ET)如何选择?
- 一般使用LT模式更简单可靠
- 对性能要求极高且能处理好细节时用ET
4.为什么ET要将fd设为非阻塞?
- 因为ET模式只通知一次,必须一次性读完所有数据
- 如果使用阻塞IO,在读完数据前可能会阻塞,导致其他fd得不到处理
5.IO多路复用是异步IO吗?
- 不是,本质仍是同步IO
- 它只是提供了一种同时监视多个IO事件的机制
- 真正的异步IO是是由内核完成IO操作后再通知应用