理解高并发(20).大白话阿姆达尔定律

来源:互联网 发布:淘宝服装模特摄影 编辑:程序博客网 时间:2024/06/08 19:46
技术来源于生活,技术又改变了生活。

从生活中的例子说起
要完成拖地和烧开水这么一个工作, 假设烧开水需要花费 2分钟, 拖地需要2分钟, 各占总时间的50%。 为了赶时间,我发动老婆一块帮忙, 因为烧开水的时间不为人所能控制,因此增派人手能做的工作只能是打扫卫生, 此时完成整项工作可提升的速度为:
可提升效率倍数: 1/( 0.5 + 0.5/2) = 1.3 倍 , 总完成时长缩短到3分钟
人手增派到4人的话,
可提升的效率倍数: 1/ (0.5 + 0.5/4) = 1.6倍, 总完成时长2.5分钟

假设当增派的人手足够多时,最理想的情况下也只能是打扫卫生的时间为0, 最理想的可提升效率的倍数为:1/0.5 = 2倍,最理想的总完成时长为2分钟。
此时已是极限,如果需要再降低总时间,只能是想办法降低烧开水的时长了。

将该例子抽象出来形成公式为:
可提升效率倍数 = 1 / (烧开水所占时长比例 + 拖地所占时长比例 /工作者数)

从这个公式可以看出,能提升性能的几个指标:
  • 工作人手
人海战术,通过增加人手的方式,将可并行处理的工作分解。但是这会有个极限,当达到极限时,即使添再多的人对整体效率来说也是无济于事的。
反映到我们的编程模式里面就是通过增加cpu个数或是增加线程数提升性能。
  • 烧开水的时间
想办法降低烧开水的时间也能使整体性能得到提升。
反映到我们的编程模式里面就是尽量减少阻塞,减少串行执行的可能。


何谓阿姆达尔定律
看完上面的例子,阿姆达尔定律已基本清楚,他无非也是定义一套公式用来计算程序可提升的性能倍数。
可提升性能倍数 = 1/(串行执行时间比 + 并行执行时间比/cpu数)
通过优化1)串行执行时间比 2)增加cpu数 提升性能。
原创粉丝点击