Skip to content
极高进阶

一句话答案

一个线程同时监听多个 IO 事件(fd),哪个就绪处理哪个,避免每连接一线程,实现有 select/poll/epoll。

核心要点

核心思想: 不阻塞在单个 IO 上,而是同时监听多个 fd,哪个就绪处理哪个

三种实现: select(数组1024限制) → poll(链表无限制) → epoll(红黑树+就绪链表,最高效)

追问与易错

追问方向:

  • IO 多路复用是同步还是异步?
  • select/poll/epoll 区别?
  • Java NIO 用的是哪个?

易错点:

  • ❌ IO 多路复用是异步 IO——不是,是同步非阻塞
  • ❌ 只能用于网络——也可用于文件 IO

💡 记忆锚点

IO多路复用像一个服务员同时看多桌客人:不是每桌派一个服务员(每连接一线程),而是一个人眼观六路,哪桌举手就去哪桌(哪个fd就绪处理哪个)。注意它仍是同步的——服务员自己去端菜(数据拷贝),不是后厨送到桌上(那是异步IO)。