法则(法律)是什么?
根据维基百科的介绍,法律是指国家为维护社会和平和安全而制定的一套规则。
物理定律是另一种“法律”,它们是根据经验观察推导出的事实。我们周围的世界以特定的方式运作,而物理定律可以阐明这些方式。
那么在计算机科学中,定律代表着什么呢?它们是维护软件社会和平的规则,还是基于观察而推导出的事实?
本文将列举计算机科学中最常用的定律,并将其分类。
摩尔定律(Moore’sLaw)
摩尔认为,微芯片上的晶体管数量每两年会翻一番,尽管这样使得电脑的成本加倍。他的这一观点称为摩尔定律。这一定律指出,计算机的速度和能力每隔几年就会提高,获得相同机能的花费也会减少。目前人们认为,正如摩尔定律所预测,计算机的运行速度每18个月就会翻一番。的确,过去50年都是如此。然而由于技术上的障碍,摩尔定律所预言的情形即将结束。赫伯萨特作于2005年的一篇流传甚广的文章中写道:摩尔定律的预测呈现指数增长,很明显,在突破物理硬件的限制之前,指数增长无法永远持续下去。
最重要的问题是未来几代处理器将通过完全不同的方式提升性能。大多数的应用程序若不经重新设计将无法搭上这趟顺风车。只有优良的并发(往往是多线程)程序才能受益于新处理器持续的指数级性能提升。说起来容易做起来难,并非所有问题都天然适合并行处理,并且并发编程并不容易,这就指引人们转向阿姆达尔定律。
阿姆达尔定律用于计算优化某一部分能够对整体产生的最大优化效果。在并行计算中,阿姆达尔定律主要用于预测使用多处理器的程序理论上所能达到的最大提速。
其中Slatency是任务整体执行过程的理论提速。S是任务中受益于系统性能提升的那一部分的加速,p是获益部分占用执行时间的比例。
古斯塔夫森定律(Gustafson’sLaw)
古斯塔夫森定律给出了任务执行时间固定时通过提升系统性能所能达到的理论潜在加速。古斯塔夫森用以下公式预测使用N个处理器(而非一个)处理串行分数为s的任务时所获得的加速S(串行分数不能从并行中获益):
使用不同的变量,古斯塔夫森定律也可表述为:
其中,Slatency是整个任务执行过程的理论潜在加速,s是任务执行中受益于系统资源改进部分的潜在加速,p是系统资源改善之前受益部分占整个任务的执行工作量的比例。
古斯塔夫森定律补充了阿姆达尔定律的缺点,阿姆达尔定律假设问题大小固定,即执行的工作量不会随着资源的改善而改变。古斯塔夫森定律提出,程序员倾向于调整问题的大小以充分利用通过改善资源释放出的计算能力。更快的设备可以使用相同时间解决更大的问题。
古斯塔夫森定律的意义在于改变了研究的目标,选择或重构问题从而使用相同时间解决更大的问题。这一定律在某种意义上重新定义了效率,程序顺序的限制可以通过总计算量的增加来抵消。
阿姆达尔定律和古斯塔夫森定律的区别在于针对的目标,在问题大小增加的情况下维持相同的执行时间,或在问题大小不变的情况下减少执行时间。优化的目标是使程序在相同的工作负载下更快运行(阿姆达尔定律),或在相同的运行时间内实现更大的工作负载量(古斯塔夫森定律)。
维尔斯定律(Wirth’sLaw)
维尔斯定律认为,软件变慢的速度比硬件变慢的速度快。该定律在2009年由谷歌的创始人拉里·佩奇重新表述,因此也称为佩奇定律。这一定律的其他表述形式使用了20世纪90年代领先的硬件和软件公司(英特尔和微软),或者说他们的首席执行官(安迪·格鲁夫与比尔·盖茨)的名字:“英特尔赠予的由微软拿走”,“安迪赠予的由比尔拿走”。
来源:Pexels
本文讨论的定律都建立在观察、实验与数学基础之上。
事实证明,它们更接近于物理定律,而不是维护社会和平与安全的法律。
计算机科学需要这些定律,而且部分定律非常流行,比如SOLID原则,GRASP原则以及各种架构模式和良好的实践,它们有助于管理程序,维护程序的稳定性,使其适应各种变化。
了解这些定律,相信在一定程度能扩充你的知识层,为今后的学习奠定良好的知识储备。
编译:佚名
来源:https://dzone.com/articles/service-provider-framework
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/258220.html