一句话定义

poll 是对 select 机制的改进实现,它通过 pollfd 结构体数组取代了位图限制。虽然它突破了文件描述符数量的硬上限,但在内核层面仍需通过线性遍历整个数组来确定就绪状态,其时间复杂度仍为 O(n)。

核心原理

poll 的核心逻辑与 select 类似,但数据结构发生了变化:

  1. 结构化存储:使用 pollfd 结构体数组,每个结构体包含 FD、关注事件(events)和实际发生事件(revents)。
  2. 动态扩容:因为底层是链表或动态数组,所以理论上可以监控无限数量的 FD(受限于内存)。
  3. 输入输出分离:由于 revents 字段专门用于存放结果,用户程序不需要像 select 那样在每次调用前重新初始化整个集合。

应用场景

  • 中等并发规模:在 FD 数量超过 1024 但又没达到万级并发(C10K)的场景下,poll 是一个比 select 更灵活的选择。
  • 非 Linux 系统:在某些不支持 epoll 的类 Unix 系统中作为替代方案。