(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑得更快”。
(Throughput)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。
我们可以把性能定义为相应时间的导数:性能 = 1/ 响应时间。
当我们说性能优化的时候,一般说指TPS和QPS,CPU、内存、网络、磁盘IO来说,增加缓存,增加节点,多线程,空间换时间,预处理,SQL优化,增加索引等等、今天我们从计算机组成原理来说一下,我们在性能优化方面有哪些套路?
面向摩尔定律的设计
摩尔定律指出单芯片上的集成度每18-24个月翻一番。计算机设计者必须预测其设计完成时候的工艺水平。
例如:spring boot 的统一pom管理,统一的starter,为后续升级组件提供规范化管理。
使用抽象简化设计
使用抽象技术来表示不同的设计层次,在高层次中看不到低层次的细节,只能看到一个简化的模型。
例如:系统的分层和微服务的域划分,这样的话可以更好地水平扩展。
加速大概率事件
加速大概率事件(common case fast)远比优化小概率事件更能够提高性能。大概率事件通常比小概率事件简单,从而易于提高。
大概率事件规则意味着设计者需要知道什么事件是经常发生的,这只有通过仔细的实验与评估才能够得出。
例如:各种缓存(内存缓存、CDN缓存),索引等。
通过并行提高性能
通过并行执行操作来提高性能。虽然从上海到北京的时间没有变,但是一次飞 8 架飞机能够运的东西自然就变多了,也就是所谓的“吞吐率”变大了。所以,不管你有没有需要,现在 CPU 的性能就是提升了 2 倍乃至 8 倍、16 倍。这也是一个最常见的提升性能的方式。
例如:多线程,并发编程调用等提升吞吐量。
通过流水线提高性能
现代的工厂里的生产线叫“流水线”。我们可以把装配 iPhone 这样的任务拆分成一个个细分的任务,让每个人都只需要处理一道工序,最大化整个工厂的生产效率。类似的,我们的 CPU 其实就是一个“运算工厂”。我们把 CPU 指令执行的过程进行拆分,细化运行,也是现代 CPU 在主频没有办法提升那么多的情况下,性能仍然可以得到提升的重要原因之一。我们在后面也会讲到,现代 CPU 里是如何通过流水线来提升性能的,以及反面的,过长的流水线会带来什么新的功耗和效率上的负面影响。
例如:一个大规模的SQL分成几个规模适当的小SQL进行执行、分布式系统、异步编程,分而治之,MapReduce,Fork/Join等。
通过预测提高性能
通过猜测的方式提前开始某些操作,通常适用于从误预测恢复执行的代价不高且预测的准确率相对较高的情况。
例如:小说的下一页预加载,电商大促的CDN预热,空间换时间等。
通过冗余提高可靠性(性能)
计算机不但需要速度快,而且需要工作可靠。 由于任何一个物理器件都可能失效,因此可以通过冗余部件的方式提高系统的可靠性(dependable),冗余部件可以替代失效部件并可以帮助检测错误。
例如:冗余也可以提升性能,如数据库查询。
以上是从计算机组成原理方面说性能优化的方式,性能优化不是一蹴而就的,需要跟着业务循序渐进。需求阶段,设计阶段,实现阶段;越在提前的阶段优化效果越明显,同时也更需要对业务、需求的深入理解。所以平时开发当中勿以善小而不为,勿以恶小而为之。
开发应该知道的Linux系统分析
开发应该知道的Linux系统分析-CPU篇
开发应该知道的Linux系统分析-IO篇
开发应该知道的Linux系统分析-内存篇
开发应该知道的Linux系统分析-网络篇
每周一句:管理要本位思考,沟通要换位思考。