epoll——I/O多路复用技术

Linux 下实现 I/O 多路复用的系统调用有 select、poll、epoll。其中 epoll 是性能最好、最适合高并发场景的。

1.I/O多路复用

要搞懂epoll,就得先明白什么是多路复用技术。

它的本质其实很简单,用一个内核维护的监控集合(如 epoll)存储所有已连接的客户端 socket,主线程阻塞在 epoll_wait 上(没有时间时线程挂起,不会占用cpu,有事件时内核才会唤醒它)。

等待内核通知哪些 socket 真的有了 I/O 事件(数据到达/可写/新连接),

然后主线程逐个串行(一个一个)处理这些就绪的 socket。

在 Redis 中,因为处理是内存操作且极快,单个线程就能支撑 10 万+ 连接。

关于这词分开解释:

I/O:输入/输出,这里特指网络 I/O(socket 的读和写)。

多路:多个网络连接(很多个 socket)。

复用:复用同一个线程(或进程)来管理所有这些连接。

合起来:

用一个线程,通过一种机制(如 epoll/select/poll)来同时监控多个 socket,只处理那些已经准备好(可读/可写/异常)的 socket。

核心优势:

  • 不需要为每个连接创建一个线程(省内存、省切换开销)。
  • 线程不会被空闲连接阻塞,可以随时去处理就绪的连接。

2.epoll本身是什么?

epoll 本身就是一个事件通知接口,它允许用户态程序向内核注册一批 socket,然后让内核帮忙监控这些 socket 上是否有 I/O 事件发生,并在事件发生时通知程序。

想象你是一个仓库管理员(主线程),你需要照看 1 万个货架(客户端连接)。

  • select/poll:你每次都要从头走到尾,问每个货架"你有没有货要出?"(轮询)。
  • epoll 是更聪明的系统:
    你给每个货架装一个呼叫按钮,然后你坐在监控室(epoll 实例)里,里面有一个登记本(红黑树) 记下所有货架的位置。当货架有货时,按钮会点亮,监控室的待办白板(就绪链表) 上就会自动写上货架号。你只需要看白板(epoll_wait),然后去处理白板上的货架。

这个"监控室 + 登记本 + 白板"就是内核中 epoll 实例所做的事情。

相关推荐
对空六课10 分钟前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
zl_dfq15 分钟前
Redis 之 【高可用架构】(从主从复制、哨兵到集群)
redis
南京码讯光电技术有限公司19 分钟前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
一条破秋裤30 分钟前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
lusklusklusk2 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea2 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
谷哥的小弟2 小时前
CentOS Stream浴火重生
linux·运维·centos
东方护航数据恢复(深圳)2 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
程序员-Benothing3 小时前
Shell输入输出详解:read、echo、printf、颜色输出
linux·运维·服务器
lusklusklusk3 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle