性能优化的三重境界
性能优化最终是追求尽可能低的计算时间成本。在目前的计算机体系结构中,表现为:
- 更少的指令数量
- 更低的指令延迟
- 更高的并发程度
而对于性能优化,以思考的尺度划分,又分为三重境界——
昨夜西风凋碧树,独上高楼,望尽天涯路
代码级。这一级的优化是最直接和最常用的方法,如:循环展开、cache预取、指令集扩展、指令重排序……这些具体方法都是可以直接导致指令数量减少或指令延迟降低的。而运用这些方法的前提是对编程语言细节、操作系统实现、CPU架构等技术细节的深入理解。通常优化者都会通过工具或经验找到代码中的性能热点,并对其进行代码级优化。
衣带渐宽终不悔,为伊消得人憔悴
算法级。采用更高效的算法和数据结构代替原有的方案。这一级的优化往往比代码级更难,但一旦成功,效果一般也会更为显著。算法级优化依赖于优化者对相关算法的掌握程度,依赖于学术界对某一类问题的研究进度,甚至依赖于客观的数学理论。
众里寻他千百度,蓦然回首,那人却在灯火阑珊处
架构级。架构级的性能优化,让我想到了”Think out of the box”这句话。想要进行架构级的优化,首先得跳出技术细节,以全局的视角来观察整个系统。在理解了系统性能瓶颈的基础上,提出对系统架构的改进,如:减少数据流的传输(The fastest way to do something is don’t do it)、使系统负荷分散化、改变硬件部署、使用更高性能的硬件等。从技术层面上看,这或许是最没有难度的,但是考虑到优化所需要投入的成本以及额外的风险,架构级优化在一些情况下却是首选方案。
优化总纲
- 先找到性能瓶颈/热点,否则不要动手优化。
- 每一次改动都要进行性能测试。
- 适可而止。
Post Info
- Copyright Notice: Creative Commons BY-NC-ND 3.0