阿姆达尔定律Amdahl和古斯塔夫森定律Gustafson

来源:东陆之滇

并发程序的几个概念

  • 同步(Synchronous)
  • 异步(Asynchronous)
  • 阻塞 (Blocking)
  • 非阻塞 (Non-Blocking)
  • 死锁 (Deadlock)

同步和异步通常用来形容方法的调用方式。 同步的方法调用时,后续行为需要等到方法执行完毕后才能执行。 异步调用时,一旦调用可以立即拿到结果,调用方可以继续后续的操作。

这里写图片描述

举个生活中的例子,两件事:煮饭、烧菜。

同步就是:淘米–》煮饭–》等饭熟–》洗菜–》烧菜

异步可能: 淘米–》煮菜–》
洗菜–》烧菜–》–》饭菜皆好。

异步可以理解为统筹思想来解决问题,尽量不在等待中浪费时间。 在实际的产品中,异步可以增强用户体验,比如常见的消息机制,就是异步程序设计的优雅体现。

阻塞和非阻塞通常用来形容多线程间的影响。 比如一个thread1占用了临界区(主内存共享资源),另外的线程需要等待thread1使用完资源之后释放完成,才能获得资源锁。所有的等待都会导致线程挂起,导致资源占用阻塞。

死锁: 比如在双车道高速公路上并行的两辆车A、B,A想拐到B车道,B想转到A车道。现在则会发现互相等待对方开走,但是对方一直往这边转过来,一直僵持。。。这在程序中的多个线程互相等待就是死锁。

有关并行地两大定律

阿姆达尔定律是计算机并行重要的定律。定义了串行系统并行化后的加速比的计算公式和理论上限。

加速比 = 优化之前系统耗时 / 优化后系统耗时

这里写图片描述

假设有n个处理器,t1表示优化前耗时,tn表示经过n个处理器优化后的耗时,f是程序中只能串行执行的比例。

则 tn = t1 * ( f + (1 – f) / n )

加速比 = t1/tn

这里写图片描述

我们可以分析出, 串行比例越低且处理器越多,加速比越高,程序优化效率越高。
如果串行比例占2/3,则无论处理器再多,最大加速比也只能达到1.5。

理想效果是,全部并行,最大加速比为 n。可以根据增加处理器无上限增强程序效率。

  • 古斯塔夫森定律

古斯塔夫森定律也是在表明处理器个数、并行比例和加速比之间的关系。

执行时间: 串行时间a + 并行时间b

优化后时间: a + nb、

加速比: (a + nb) / (a + b)

f串行比例 : a / (a + b)

加速比 :
这里写图片描述

如果串行比例很小,那个加速比就是处理器的个数。

两个定律最低点、最高点都是一致的结论:

无可并行的程序,加速比就是1.
全部是并行程序,加速比就是n

此条目发表在Java基础分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注