核心解答

I/O 多路复用(I/O Multiplexing) 是一种允许单个线程/进程同时监控多个 I/O 流(如网络套接字)状态的机制。它的核心价值在于:用最少的资源(线程)处理最多的连接

在没有多路复用之前,处理 1000 个连接通常需要创建 1000 个线程(阻塞式 I/O)或让一个线程不断循环检查 1000 个连接(非阻塞轮询),前者浪费内存和切换开销,后者浪费 CPU。多路复用让内核来代劳这种“监控”工作,当有连接真正“就绪”时才通知应用程序。

技术演进

  • 阻塞 I/O:一连接一线程,并发上限受限于内存。
  • 非阻塞轮询:不停地问“好了吗?”,空转消耗 CPU。
  • 多路复用:把 FD 扔给内核,内核说“好了我叫你”,高效且省资源。

深度解析与面试技巧

面试官可能的追问方向
  • Redis 为什么快?(核心答案之一就是使用了 I/O 多路复用)。
  • 水平触发 (LT) 和 边缘触发 (ET) 的区别?(通常在问完 epoll 后必问)。
  • 既然 epoll 这么好,为什么 select 还没被淘汰?(跨平台兼容性好,且在 FD 数量极少时,select 的开销可能更小)。