一、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),连接数多时性能下降