📦 开源仓库:learn_backpressure · 纯 Python 标准库 · 学习演示项目
生产者比消费者快,队列无限堆积,最后内存爆掉——这是流式系统最经典的死法。背压(Backpressure)的解法很朴素:在中间放一个有界队列,队列满了就拒绝/减速上游,让「下游的速度」反向传递回「上游」。
核心思路
producer ──► [ 有界队列(容量 N) ] ──► consumer
│
└─ 队列满 → 生产者被限速/拒绝(背压发生)
- 没有背压:快生产者 + 慢消费者 = 内存无限膨胀
- 有界队列:超量的推送被拒绝,生产者被迫调整速率
- 下游反过来决定上游该跑多快
为什么值得学
- 内存有界:队列永远不会涨破
- 自然的速率匹配:生产速度自动贴合消费能力
- 高压下稳定:流量尖峰不再引发连锁 OOM
演示场景
- 消费者跟得上 → 队列很小,几乎无丢弃
- 消费者变慢 → 队列涨到容量上限,生产者被背压(丢弃超额部分)
- 消费者恢复 → 积压排空后生产者继续推
运行
python run_all.py
纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_backpressure,欢迎 Star 与提 Issue。