有资源网

搜索
有资源网 首页 编程语言 查看内容

java高并发系列 - 第3天:有关并行的两个重要定律

2019-7-26 01:06| 发布者: admin| 查看: 155| 评论: 0

摘要: 有关为什么要使用并行程序的题目前面已经举行了简单的探讨。总的来说,最重要的应该是处于两个目的。 第一,为了获得更好的性能; 第二,由于业务模型的需要,确实需要多个实行实体。 在这里,我将更加关注第一种情

有关为什么要使用并行程序的题目前面已经举行了简单的探讨。总的来说,最重要的应该是处于两个目的。

第一,为了获得更好的性能;

第二,由于业务模型的需要,确实需要多个实行实体。

在这里,我将更加关注第一种情况,也就是有关性能的题目。将串行程序改造为并发程序,一般来说可以进步程序的团体性能,但是究竟能进步多少,乃至说究竟是否真的可以进步,照旧一个需要研究的题目。现在,主要有两个定律对这个题目举行解答,一个是Amdahl定律,别的一个是Gustafson定律。

Amdahl(阿姆达尔)定律

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

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

所谓加速比就是优化前耗时与优化后耗时的比值。加速比越高,表明优化结果越显着。图1.8表现了Amdahl公式的推到过程,此中n表现处理处罚器个数,T表现时间,T1表现优化前耗时(也就是只有1个处理处罚器时的耗时),Tn表现使用n个处理处罚器优化后的耗时。F是程序中只能串行实行的比例。

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(1)

根据这个公式,如果CPU处理处罚器数量趋于无穷,那么加速比与系统的串行化比例成反比,如果系统中必须有50%的代码串行实行,那么系统的最大加速比为2。

假设有一个程序分为以下步骤实行,每个实行步骤泯灭100个单位时间。此中,只有步骤2和步骤5可以并行,步骤1、3、4必须串行,如图1.9所示。在全串行的情况下,系统合计耗时为500个单位时间。

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(2)

若步骤2和步骤5并行化,假设在双核处理处罚器上,则有如图1.10所示的处理处罚流程。在这种情况下,步骤2和步骤5的耗时将为50个单位时间。故系统团体耗时为400个单位时间。根据加速比的定义有:

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

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(3)

由于5个步骤中,3个步骤必须串行,因此其串行化比例为3/5=0.6,即 F = 0.6,且双核处理处罚器的处理处罚器个数N为2。代入加速比公式得:

加速比 = 1/(0.6+(1-0.6)/2)=1.25

在极度情况下,假设并行处理处罚器个数为无穷大,则有如图1.11所示的处理处罚过程。步骤2和步骤5的处理处罚时间趋于0。即使这样,系统团体耗时依然大于300个单位时间。使用加速比计算公式,N趋于无穷大,有加速比 = 1/F,且F=0.6,故有加速比=1.67。即加速比的极限为500/300=1.67。

由此可见,为了进步系统的速度,仅增长CPU处理处罚的数量并不一定能起到有效的作用。需要从根本上修改程序的串行举动,进步系统内可并行化的模块比重,在此底子上,公道增长并行处理处罚器数量,才能以最小的投入,得到最大的加速比。

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(4)

注意:根据Amdahl定律,使用多核CPU对系统举行优化,优化的结果取决于CPU的数量,以及系统中串行化程序的比例。CPU数量越多,串行化比例越低,则优化结果越好。仅进步CPU数量而不低沉程序的串行化比例,也无法进步系统的性能。

阿姆达尔定律图示

为了更好地明白阿姆达尔定律,我会实验演示这个定定律是如何诞生的。

首先,一个程序可以被分割为两部门,一部门为不可并行部门B,一部门为可并行部门1 – B。如下图:

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(5)

在顶部被带有分割线的那条直线代表总时间 T(1)。

下面你可以看到在并行因子为2的情况下的实行时间:

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(6)

并行因子为3的情况:

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(7)

举个例子

一个业务会串行调用2个方法,m1,m2,m1耗时100ms,m2耗时400ms,m2内部串行实行了4个无依靠的使命,每个使命100ms,如下图:

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(8)

m2内部的4个使命无依靠的,即可以并行举行处理处罚,4个使命同时并行,当cpu数量大于便是4的时间,可以让4个使命同时举行,此时m2耗时最小,即100ms,cpu为2个的时间,同时只可以大概实行2个使命,其他2个使命处于等待cpu分配时间片状态,此时m2耗时200ms;当cpu凌驾4个的时间,大概趋于无穷大的时间,m2耗时照旧100ms,此时cpu数量再怎么增长对性能也没有提升了,此时需要提升的是使命可以并行的数量。

从阿姆达尔定律可以看出,程序的可并行化部门可以通过使用更多的硬件(更多的线程或CPU)运行更快。对于不可并行化的部门,只能通过优化代码来达到提速的目的。因此,你可以通过优化不可并行化部门来进步你的程序的运行速度和并行能力。你可以对不可并行化在算法上做一点改动,如果有大概,你也可以把一些移到可并行化放的部门。

Gustafson定律

Gustafson定律也试图说明处理处罚器个数、串行化比例和加速比之间的关系,如图1.12所示,但是Gustafson定律和Amdahl定律的角度差别。同样,加速比都被定义为优化前的系统耗时除以优化后的系统耗时。

编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(9)

根据Gustafson定律,我们可以更轻易地发现,如果串行化比例很小,并行化比例很大,那么加速比就是处理处罚器的个数。只要不停地累加处理处罚器,就能获得更快的速度。

Amdahl定律和Gustafson定律结论有所差别,并不是说此中有个是错误的,只是二者从差别的角度去对待题目的结果,他们的侧重点有所差别。

Amdahl强调:当串行换比例一定时,加速比是有上限的,不管你堆叠多少个CPU到场计算,都不能突破这个上限。
Gustafson定律关系的是:如果可被并行化的代码所占比例富足大,那么加速比就能随着CPU的数量线性增长。

总的来说,提升性能的方法:想办法提升系统并行的比例,同时增长CPU数量。

java高并发系列

  • java高并发系列 - 第1天:必须知道的几个概念
  • java高并发系列 - 第2天:并发级别
  • java高并发系列 - 第3天:有关并行的两个重要定律
  • java高并发系列 - 第4天:JMM相干的一些概念
  • java高并发系列 - 第5天:深入明白进程和线程
  • java高并发系列 - 第6天:线程的基本操作
  • java高并发系列 - 第7天:volatile与Java内存模型
  • java高并发系列 - 第8天:线程组
  • java高并发系列 - 第9天:用户线程和保卫线程
  • java高并发系列 - 第10天:线程安全和synchronized关键字
  • java高并发系列 - 第11天:线程中断的几种方式
  • java高并发系列 - 第12天JUC:ReentrantLock重入锁

java高并发系列连载中,总计估计会有四五十篇文章,可以关注公众号:javacode2018,获取最新文章。
编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(10)

java高并发系列交流群
编程语言-免费yoqqjava高并发系列 - 第3天:有关并行的两个重要定律yoqq资源(11)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部