Date: 2025-06-01


并行的限制

程序中无法并行的部分,决定了整体性能的上限。

Amdahl 定律

Image

一个程序中,假设其中 Lock / Unlock 是串行(不可并行),只占 30% 时间;

  • 你把其余的 70% 并行了,最多也只能加速约 1 / (0.3 + 0.7/N);

  • 即使 N=100,也不是 100 倍加速,可能只有 3 倍左右。

  • 任务中无法并行的部分就是瓶颈,再多线程、再多 CPU 也没用;

  • 可并行度越小,增加资源的收益越差

虽然Amdahl 定律 展现了一个令人失望的结果! 但我们仍然需要乐观

乐观视角

Gustafson 定律

Amdahl 假设任务总量是固定的,这在现实中不常见,反过来看:既然加速比有瓶颈,那我们不如做更多的任务!

核心思想: 并行不是为了加速固定的任务,而是为了让我们能处理更大的问题规模、更复杂的数据量。

Image

你银行系统如果每天只能处理 1 万笔转账(串行),用了并发系统之后,不是把 1 万笔处理更快 —— 而是你能处理 100 万笔!

并发和并行

Rob Pike说过的一句经典的话

“Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.”

并发: 你能同时接收很多个转账请求,每个请求你都安排好流程、排队、处理顺序;

并行: 你有多个处理器,多个请求可以真的在同一时刻一起处理(比如一个核心处理用户 A 的转账,另一个处理用户 B 的转账)。

并发是编程模型,Go 语言提供了 goroutine + channel,容易表达并发逻辑;是否能并行,是操作系统 + CPU 的事。