一句话定义:并发(concurrency)说的是同一时刻系统里有多少个请求正在处理中,是一个瞬时快照;速率(rate,常写成 QPS、TPS)说的是单位时间内发出或完成了多少个请求,是一段时间的累计。两者量纲不同,不能互相替代。
用餐厅打个比方
一家能坐 20 桌的店,20 桌就是它的并发上限。至于每分钟能接待多少客人,取决于每桌坐多久:如果每桌慢悠悠吃一小时,一小时最多翻 20 桌;如果客人是来打包咖啡、5 分钟就走,同样 20 桌并发,一小时能翻 240 桌。容量没变,速率差了 12 倍,差别全在“每单占用多久”。
这条关系有个名字:Little 定律(Little's law)——
> 平均并发 ≈ 速率 × 平均处理时长
它解释了为什么“我们能扛 1000 并发”这种说法几乎没信息量:不告诉你每个请求跑多久,就换算不出能服务多少用户。
和相邻概念的区别
| 并发(concurrency) | 速率(rate / throughput) | |
|---|---|---|
| 回答的问题 | 此刻有多少个在处理 | 单位时间处理了多少个 |
| 单位 | 个(请求) | 个/秒、次/分钟 |
| 受什么限制 | 连接数、线程池、内存、显存、上游配额 | 单请求耗时、并发上限、带宽 |
| 涨上去的典型后果 | 排队、延迟上升、超时、OOM | 不一定变慢,可能只是队列变长 |
| 怎么调 | 扩连接池、扩实例、加显存 | 缩短单请求耗时、加并发、加机器 |
顺带区分另一个易混词:并发(逻辑上同时处理多件事)也不等于并行(parallelism,物理上真的同一时刻一起执行)。单核也能有并发,靠的是快速切换。
对从业者的实际意义
- 压测报数:只说“扛住了 1000 QPS”意义有限,要同时给出延迟分位数和当时的并发数。速率可以靠堆并发硬顶上去,代价是排队和延迟;有意义的说法是“在 P99 延迟不超过某个目标的前提下,速率是多少”。
- 容量规划:按
并发 = 速率 × 时长反推资源。在 LLM 推理这类场景里尤其明显:单请求生成得越久,同样并发档位能支撑的速率越低,缩短输出长度能直接换速率。所以“支持 N 并发”这类宣传,不配合“每个请求平均跑多久”,就无法换算成你的业务能承载多少用户。真要选型,以官方页面和实测为准。 - 限流与排队:网关的限流器通常限制速率(每分钟多少次),而连接池、线程池、显存里能塞多少请求限制的是并发。两个旋钮调混了,要么机器空转浪费钱,要么请求全堵在队列里超时。
一句话收尾:报数时永远带上单位,说并发就讲“同时有多少个在飞”,说速率就讲“每分钟多少个”,别拿一个词替另一个词。
