I/O 多路复用 (I/O Multiplexing) 是解决单线程处理大规模并发连接的核心技术。
它的本质是将“监控连接”的工作从用户态移交给内核态。用户进程不再需要为每个连接创建一个线程,也不需要自己去轮询成千上万个 Socket,而是通过一次系统调用,让内核帮忙盯着所有连接。
机制演进
在 Linux 系统中,多路复用经历了从简陋到极致的演进过程:
- select:最古老的实现。使用位图管理,存在 1024 的数量限制,且每次调用都要全量拷贝 FD 集合,效率较低。
- poll:select 的加强版。使用结构体数组解决了数量限制,但依然摆脱不了线性扫描和重复拷贝的开销。
- epoll:Linux 的终极方案。引入了红黑树和就绪链表,通过事件驱动机制实现了 的处理效率,是支撑百万并发的“神兵利器”。
理解这些机制的差异,是掌握高性能网络编程(如 Redis, Nginx, Go Runtime)的关键。