加载中...
epoll 是 Linux 提供的高效 I/O 多路复用机制,用于同时监听大量文件描述符的就绪状态。相比传统的 select 和 poll,它在海量连接场景下具有近乎常数级的性能,是高并发网络服务器的核心技术。

| 英文名 | event poll |
| 类型 | I/O 多路复用机制 |
| 所属系统 | Linux |
| 核心接口 | epoll_create/ctl/wait |
| 触发模式 | 水平触发、边缘触发 |
epoll是 Linux 特有的一种 I/O 多路复用(I/O Multiplexing)机制,允许一个线程同时高效地监视成千上万个文件描述符的读写就绪状态。它是构建高并发网络服务器的基础技术,广泛应用于 Nginx、Redis 等软件。
传统的 select 和 poll 在每次调用时都要把全部被监视的描述符集合从用户空间拷贝到内核,并线性扫描一遍,连接数越多开销越大。epoll 通过在内核中维护一个事件表,只关注真正发生变化的描述符,使得处理效率几乎不随连接总数增长而下降,从根本上解决了 C10K(万级并发连接)问题。
epoll 是 Linux 上高性能网络编程的事实标准。Nginx、Redis、Node.js 的底层事件循环、以及各类高并发网关和代理都依赖它来支撑海量并发连接。其他平台有对应机制,如 BSD 的 kqueue、Windows 的 IOCP。
问:epoll 一定比 select 快吗?答:在监听大量描述符且活跃比例较低时 epoll 优势明显;若只监听少量描述符,select 甚至可能更简单高效。
问:水平触发和边缘触发怎么选?答:水平触发编程简单、不易漏事件,是常见默认选择;边缘触发减少了重复通知,性能更好,但必须一次性读干净数据,否则会丢事件。

| 英文名 | event poll |
| 类型 | I/O 多路复用机制 |
| 所属系统 | Linux |
| 核心接口 | epoll_create/ctl/wait |
| 触发模式 | 水平触发、边缘触发 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧