阿姆达尔定律:并发编程优化是有上限的

1/5/2026并发

阿姆达尔定律(Amdahl's Law,Amdahl's Argument),计算机科学界的一个经验法则,因IBM公司计算机架构师吉恩·阿姆达尔而得名。阿姆达尔曾致力于并行处理系统的研究,他进行了一项富有洞察力的观察:提升系统的一部分性能对整个系统的性能有多大影响。这一观察被称为阿姆达尔定律:阿姆达尔定律

当提升系统的一部分性能时,对整个系统性能的影响取决于:

  • 这一部分有多重要。
  • 这一部分性能提升了多少。

假设原来在系统中执行一个程序需要的时间为Told,其中某一部分占的时间百分比为a,如果这一部分的性能提升k倍,即提升的这一部分原来需要的时间为αTold,现在需要的时间变为(αTold)/k,那么整个系统执行此程序需要的时间就会变为

Tnew=不能并发执行的部分所需的时间+并发提升后所需的时间=(1-α)Told+(αTold)/k

因此,加速比(系统性能提速的倍数,Told/Tnew) 为S=1/((1-a)+a/k)

因为a的取值范围是0~1,所以加速比就是1~k。在程序没有部分做并发性能提升的情况下,程序没有办法加速。如果程序整个部分都可以做并发性能提升,那么加速比可以达到k。

阿姆达尔定律从理论上指出了程序所能达到的最大加速比。比如程序原来是串行执行的,但是我们对其中的一半进行优化,使其可以并行地执行,而且有充足的CPU可以并行执行这一半的任务。结果是,即使使用足够多的CPU去并行执行这一半的任务,最后的加速比也不会超过2。

我们在设计并发程序的时候,应尽量让可并发的部分在整个系统中占比较大(α较大),这样才可能得到更大的加速比。这就要求我们仔细地设计程序,尽量减少串行的部分,同时尽量提升并发部分的性能,使k变大。