外观
一句话答案
select 有 1024 fd 限制且全量遍历,poll 无限制但仍全量,epoll 红黑树+回调链表 O(1) 就绪检测最高效。
核心要点
| 维度 | select | poll | epoll |
|---|---|---|---|
| fd上限 | 1024 | 无限制 | 无限制 |
| fd传递 | 每次全量拷贝 | 每次全量 | epoll_ctl增量 |
| 就绪检测 | O(n)遍历 | O(n)遍历 | O(1)就绪链表 |
| 触发方式 | 水平触发 | 水平触发 | ET+LT |
结论: 大量连接用epoll,少量连接差异不大
追问与易错
追问方向:
- epoll 的 LT 和 ET 什么区别?
- 连接数少时用哪个?
- 为什么 ET 编程更复杂?
易错点:
- ❌ epoll 永远最好——连接数少时 select 更简单
- ❌ ET 一定比 LT 快——ET 需要循环读取更复杂
💡 记忆锚点
三种模型像点名:select是班主任每次拿着花名册从头喊到尾(O(n)遍历),还只能管1024人;poll取消了人数限制但还是从头喊到尾;epoll像装了呼叫按钮,谁举手谁响铃(回调+就绪链表O(1)),人再多也不怕。大班用epoll,小班用哪个都行。