一句话定义

epoll 是 Linux 内核中针对大规模并发连接优化的 I/O 事件通知机制。它彻底摒弃了传统的线性扫描或轮询模式,转而采用 事件驱动(Event-driven) 与异步回调机制,实现了 O(1) 复杂度的就绪通知效率。

核心原理

epoll 的高效源于其内核中的“三位一体”设计:

  1. 红黑树 (RB-Tree):用于存储所有被监控的 FD。红黑树的增删改查效率极高(O(log N)),且 FD 只需在注册时拷贝一次到内核,无需重复拷贝。
  2. 回调机制 (Callback):当某个 FD 有数据到达时,内核会自动触发回调函数,将该 FD 放入“就绪链表”。
  3. 就绪链表 (Ready List)epoll_wait 调用时,直接检查这个链表是否有数据即可。如果有,直接返回给用户,效率是 O(1)。

应用场景

  • 高并发服务器:如 Nginx、Redis、Node.js 等现代高性能后端组件的核心。
  • 分布式系统:处理海量长连接的网关和代理。

知识扩展

  • C10K 问题:单机同时处理一万个并发连接的挑战,epoll 是该问题的标准答案。