并行程序两个定律
使用并行程序的目的:
- 为了获得更好的性能
- 由于业务模型的需要,需要多个执行实体
Amdahl定律
Amdahl定律定义了串行系统并行化后的加速比的计算公式和理论上限
加速比定义:加速比=优化前系统耗时/优化后系统耗时
加速比越高,表明优化效率越高
推导公式:
n:处理器个数
T:时间
T1:表示优化前耗时(只有一个处理器时的耗时)
Tn:使用n个服务器优化后的耗时
F:程序中只能串行执行的比例
当cpu处理器数量趋于无穷大的时候(理想化),加速比=1/F,加速比跟系统串行率成反比,所以就是串行率越低,则优化效果越好
程序当中的串行行为会影响系统的速度,仅仅增加CPU处理器数量不一定能起到有效的作用,也要提高系统内并行化的模块比重
增加cpu处理器数量意味着投入的资本需要更多,所以需要在一定的cpu数量下,合理增加并行处理器数量,如果只提高cpu数量,而不降低程序的串行化比重,也无法对系统性能有多大的提高
Gustafson定律
推导公式:
当串行比例很小,并行比例很大,那么加速比就是处理器的个数
两个定律是否互相矛盾
两个理论的结论不同,但是并不是说其中一个是错误的,只是偏重点不同
Amdahl强调:当串行比例一定时,加速比是有上限的,不管有多少个CPU参与计算,都不能突破这个上限
Gustafson强调:如果可被并行化的代码所占比重足够多(串行比重小),那么加速比就能睡着CPU的数量线性增长
理想状态下(几乎不可能):
- 系统没有可被串行化的代码(即F=1,全部串行),加速比就是1(没有提高系统性能)
- 系统中可串行代码比重达到100%(即F=0,全部并行),加速比就是n(处理器个数)
参考书籍
《Java高并发程序设计》-------------------------葛一鸣,郭超著