操作系统面试题, Select,Poll,Epoll 之间有什么区别?
操作系统面试题, Select,Poll,Epoll 之间有什么区别?
QA
Step 1
Q:: Select、Poll、Epoll 之间有什么区别?
A:: Select、Poll 和 Epoll 是三种不同的 I/O 多路复用技术,用于处理多个文件描述符的 I/O 操作。Select 是最早的实现,使用一个固定大小的数组来存储文件描述符,并通过遍历整个数组来检测 I/
O 事件。Poll 解决了 Select 的一些限制,采用动态数组替代固定大小数组,但仍然需要遍历整个数组。Epoll 是 Linux 下的一种高效实现,使用事件通知的方式,避免了遍历整个数组,能够在高并发场景下表现出更好的性能。
Step 2
Q:: 什么是 I/
O 多路复用?
A:: I/O 多路复用是一种能够同时监控多个 I/O 事件的方法,通过一个或少量的线程来处理大量的 I/O 操作。它的主要优势在于减少了系统资源的消耗,尤其是在高并发场景下能够大幅提升性能。常见的 I/
O 多路复用技术包括 Select、Poll、Epoll 等。
Step 3
Q:: Epoll 是如何提高性能的?
A:: Epoll 使用事件通知机制来代替轮询文件描述符集合,从而避免了不必要的遍历操作。它将关注的文件描述符注册到内核中,当某个文件描述符有事件发生时,内核会主动通知应用程序。Epoll 的另一个优势是支持边沿触发(Edge Triggered)模式,可以在事件不消耗完毕的情况下避免重复通知,大幅减少了系统调用的开销。
Step 4
Q:: Epoll 的 ET 模式与 LT 模式有什么区别?
A:: Epoll 有两种工作模式:水平触发(Level Triggered, LT)和边沿触发(Edge Triggered,
ET)。LT 是默认模式,工作方式类似于 Select 和 Poll,每次调用都会返回已经就绪的文件描述符。而 ET 则是在文件描述符从未就绪变为就绪时才通知,并且只通知一次,要求用户一定要将数据读完,否则可能会错过后续的通知。ET 模式下需要更加谨慎的设计和编码,但能减少系统调用次数,提高性能。
Step 5
Q:: Poll 为什么在高并发场景下表现不如 Epoll?
A:: Poll 的实现仍然需要遍历整个文件描述符集合,即使只有少量文件描述符有事件发生,Poll 也需要对整个集合进行轮询检查。随着文件描述符数量的增加,Poll 的性能会显著下降。而 Epoll 则采用事件通知机制,不需要遍历整个集合,因此在高并发场景下能够显著提高性能。