一、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),連接數多時性能下降