计算机网络:(poll、epoll)

一、select的不足

  1. 最大监听数受限:`FD_SETSIZE` 默认 1024(Linux)

  2. 每次调用需重置 fd_set:内核会修改集合,必须每次重新 `FD_SET`

  3. 用户态与内核态拷贝开销大

  4. 返回后仍需遍历所有 fd 才能知道哪个就绪

  5. 效率随 fd 数量增长下降明显

二、poll

(一)

(二)改进与不足

相比 select 的改进:

  1. 无 1024 限制:只要系统允许打开足够多 fd

  2. 无需重置集合:`events` 和 `revents` 分离

  3. 更清晰的事件机制

  4. 效率更高:仅遍历传入的数组,不遍历整个 fd 范围

仍存在的问题:

1.每次调用仍需将整个 `fds[]` 拷贝到内核

2.返回后仍需遍历全部元素查找就绪 fd

3.时间复杂度仍是 O(n),连接数多时性能下降

三、epoll