Select, Poll, and Epoll概念

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

Select, Poll, and Epoll 概念

在网络编程中,特别是在处理多个客户端连接到同一个服务器的情况时,我们需要一种机制来监视和响应多个文件描述符上的I/O事件。这就是select, poll, 和 epoll发挥作用的地方。它们都是I/O多路复用的技术。

Select

select是最古老的I/O多路复用接口之一,它允许程序监视多个文件描述符,等待一个或多个文件描述符成为"就绪"状态,即它们有数据可读,可写或者有异常条件待处理。

优点:

  • 简单易用。

  • 跨平台支持较好。

缺点:

  • 文件描述符数量限制,通常受限于FD_SETSIZE

  • 每次调用都需要重新传递文件描述符集合和重置它们。

  • 效率低下,它需要遍历整个文件描述符集合来找出就绪的描述符。

Poll

poll是对select的改进,它解决了文件描述符数量的限制问题。

优点:

  • 不再有FD_SETSIZE的限制。

  • 接口使用起来与select类似,易于理解和使用。

缺点:

  • select类似,poll也需要遍历整个文件描述符集合来找出就绪的描述符。

  • 每次调用poll时,需要复制整个文件描述符集合。

Epoll

epoll是Linux特有的I/O多路复用解决方案,它在效率上对selectpoll进行了显著的改进。

优点:

  • 没有文件描述符数量的限制,它是由内核中的一个数据结构来管理的。

  • 使用事件通知方式,只处理就绪的文件描述符,效率更高。

  • 支持"边缘触发"和"水平触发"两种模式,提供更灵活的使用方式。

缺点:

  • 只在Linux系统上可用。

  • 相对于selectpollepoll的API更复杂。

在选择使用select, poll, 或 epoll时,需要考虑程序的具体需求,以及运行的操作系统环境。对于大规模并发连接处理,epoll通常是最佳选择,而对于跨平台的应用或者连接数量不是特别高的情况,selectpoll可能更加适合。

最后更新于