三个交互演示:① 阻塞 IO vs IO 多路复用 · ② epoll 事件循环 · ③ RESP 协议解析
每个客户端代表一个 Redis 连接。命令的处理时间不一样(有快有慢)。点「开始」对比两种模型的吞吐:
左边是「已注册的所有 socket」,中间是事件循环本身,右边是「当前轮就绪的事件」。点「下一步」单步看完整循环:
epoll_ctl),之后内核会主动把就绪事件推到队列里;
epoll_wait 一旦返回就直接拿到「哪些 FD 可读 / 可写」,无需像 select 那样轮询全量 FD。这就是 epoll 复杂度从 O(N) 降到 O(1) 的关键。
修改下面的输入框(多个参数用空格隔开),实时看到对应的 RESP 字节流和解析结构:
printf '$(看左侧字节流)' | nc 127.0.0.1 6379,
就能不依赖任何客户端库,用 RESP 直接和 Redis 对话!