Redis 事件循环 · 交通调度台

多个连接可以同时就绪,但命令进入主执行通道后要逐个通过。把慢操作放到前面,看看后车会等多久。

0.0 单位 演示时间,不是真实毫秒
① 选择发出请求的客户端
② 把命令放到连接上
③ 运行事件循环

初始队列故意让慢命令先出发。运行后可随时暂停,再补充请求观察排队变化。

网络 I/O 辅助线程与后台持久化可以分担部分工作;它们不会把命令主执行通道变成随意并行,也不会让排在慢命令后面的命令插队。

客户端连接

4

连接可以同时存在;黄色信号表示该连接有请求等待事件循环发现。

I/O 多路复用

0

像调度员巡视多个路口:谁已就绪,就把谁的请求登记到待执行队列。

命令主执行通道

0

一次只处理一条命令。下方等待时间会随演示时钟实时增长。

关键规则:I/O 多路复用负责高效发现“谁准备好了”,不等于这些命令会在主执行通道里同时执行。

响应返回

0

命令完成后响应离开主通道,后续命令才获得执行机会。

事件时间轴

发现就绪执行命令返回响应

先分清“并发连接”与“并行命令”

调度台能同时关注多个连接,却仍把命令送进同一条主执行通道。两件事不矛盾。

慢命令的成本不只属于自己

全量扫描类 O(N) 操作一旦占住通道,后续快速请求也会积累排队等待,形成延迟尖峰。

演示单位不是性能承诺

这里的 1、2、12 只用于看清因果关系。真实耗时取决于数据规模、命令、硬件、网络和运行环境。