外观
一句话答案
一个线程同时监听多个 IO 事件(fd),哪个就绪处理哪个,避免每连接一线程,实现有 select/poll/epoll。
核心要点
核心思想: 不阻塞在单个 IO 上,而是同时监听多个 fd,哪个就绪处理哪个
三种实现: select(数组1024限制) → poll(链表无限制) → epoll(红黑树+就绪链表,最高效)
追问与易错
追问方向:
- IO 多路复用是同步还是异步?
- select/poll/epoll 区别?
- Java NIO 用的是哪个?
易错点:
- ❌ IO 多路复用是异步 IO——不是,是同步非阻塞
- ❌ 只能用于网络——也可用于文件 IO
💡 记忆锚点
IO多路复用像一个服务员同时看多桌客人:不是每桌派一个服务员(每连接一线程),而是一个人眼观六路,哪桌举手就去哪桌(哪个fd就绪处理哪个)。注意它仍是同步的——服务员自己去端菜(数据拷贝),不是后厨送到桌上(那是异步IO)。