有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
select、poll、epoll的区别
在Linux系统中,select、poll和epoll都是I/O多路复用的技术。它们允许程序监视多个文件描述符,以等待一个或多个文件描述符上的I/O可用性。尽管它们的目的相同,但它们在实现和性能方面有所不同。
select
select是最早的I/O多路复用接口,它允许程序监视一组文件描述符,等待其中一个或多个变得“就绪”(即,数据可读、可写或出现异常)。
优点:
- 广泛支持:几乎所有的操作系统都支持select。
缺点:
- 文件描述符限制:select通常受到文件描述符数量的限制,默认情况下是1024。
- 效率问题:每次调用select时,都需要把整个文件描述符集合从用户空间复制到内核空间,这在文件描述符数量较多时会导致性能问题。
- 非自动更新:每次调用select后,都需要重新设置文件描述符集合。
poll
poll与select类似,但它没有文件描述符数量的限制,因为它使用了一个链表来管理文件描述符。
优点:
- 无文件描述符限制:poll不受最大文件描述符数量的限制。
- 易于使用:API与select类似,易于理解和使用。
缺点:
- 效率问题:与select类似,poll也需要在每次调用时复制整个文件描述符列表到内核空间。
- 非自动更新:poll同样需要在每次调用后更新文件描述符列表。
epoll
epoll是Linux特有的I/O多路复用机制,它解决了select和poll的一些主要缺点。
优点:
- 效率高:epoll使用一种事件通知机制,只有活跃的文件描述符才会触发事件,减少了数据复制的开销。
- 无文件描述符限制:epoll没有硬性的文件描述符数量限制。
- 自动更新:一旦一个文件描述符被添加到epoll的监听列表中,就无需在每次调用时更新,除非文件描述符的监听事件发生变化。
缺点:
- 平台限制:epoll只在Linux系统上可用。
总结
select适用于文件描述符数量较少且跨平台的场景。poll解决了select的文件描述符数量限制问题,但在性能上与select相似。epoll是性能最优的选择,特别是在处理大量文件描述符时,但它只能在Linux系统上使用。
在现代Linux系统中,epoll通常是首选的I/O多路复用机制,因为它提供了更好的扩展性和性能。


