Java并发基础(三)——并行的两个重要定律

概述

总的来说,使用并行程序的最重要的目的有两个。一是为了获得更好的性能;二是业务模型的需要,确实需要多个执行实体。这里主要关注程序性能的问题。

当将串行程序改造为并发程序,提高了程序的性能,但空间提高了多少?是否真的有提高?还是一个需要研究的问题。目前主要有两个定律对这个问题进行了解答,一个是Amdahl定律,另一个是Gustafson定律。

 

Amdahl定律

Amdahl定律是计算机科学中非常重要的定律,它定义了串行系统并行化后加速比的计算公式和理论上限。

加速定义:

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

通过公式可以知道,加还比值越大,表明优化的效果越好越明显。下面看一下Amdahl加速公式的推导过程。

将上面的公式代入下面的公式,得到:

加速比 =

            = 

            = 

其中,n表示处理器的个数,T表示时间,表示优化前耗时(表示只有一个处理器时的耗时),表示使用n个处理器优化后的耗时,是程序中只能串行执行的比例。

根据上面的公式,如果CPU的处理器个数趋于无穷(趋于0),则加速比与系统的串行化比例成反比,如果系统中有一半的代码是串行执行的,那么优化后的最大加速比为2。

实际上仅增加CPU处理器的数量并不一定能起到有效的作用,如果程序的串行化比例很低,那效果就不明显。但如果程序中的串行化代码比例比较高,将串行化的代码修改为并行化的模块比重,在此基础上再合理增加并行处理器的数量,才能以最小的投入,得到最大的加速比。

 

Gustafson定律

Gustafson定律也试图说明处理器个数、串行化比例和加速比之间的关系。但是Gustafson定律和Amdahl定律分析的角度有所不同。但加速比也是定义为优化前的系统耗时除以优化后的系统耗时。

从Gustafson定律中,更容易的发现,如果串行化的比例很小,并行化的比例很大,那么加速比就是处理器的个数。只要不断的累加处理器,就能获得更快的速度。

 

比较

可以看出,Gustafson定律和Amdahl定律的结果有所不同,是因为这两个定律对同一个客观事实分析的角度不太一样,侧重点也有所不同。

Amdahl强调的是,当串行化比例一定时,加速比是有上限的,不管你堆叠多少个CPU参与计算,都不能突破这个上限。而Gustafson定律认为,虽然开始运行速度慢,但只要给你足够的时间,只要你后期的速度比期望值快一点点,你总是可以把平均值速度调整到非常接近的那个期望值的。

因此Gustafson定律关心的是,如果可被并行化的代码所占比例足够大,那么加速比就能随着CPU的数量线性增长。

 

注:以上内容参考《实战Java高并发程序设计(第2版)》。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值