性能优化是指在不影响正确性的前提下,使程序运行得更快,它是一个非常广泛的话题。
软件产品多种多样,影响程序执行效率的因素很多,因此,性能优化,特别是对不熟悉的项目做优化,不是一件容易的事。
性能优化可分为宏观和微观两个层面。宏观层面包括架构重构,而微观层面,则包括算法的优化,编译优化,工具分析,高性能编码等,这些方法是有可能独立于具体业务逻辑,因而有更加广泛的适应性,且更易于实施。
具体到性能优化的方法论,首先,应建立度量,你度量什么,你得到什么。所以,性能优化测试先行,须基于数据而不能凭空猜测,这是做优化的一个基本原则。搭建真实的压测环境,或者逼近真实环境,有时候是困难的,也可能非常耗费时间,但它依然是值得的。
有许多工具能帮助我们定位程序瓶颈,有些工具能做很友好的图形化展示,定位问题是解决问题的前置条件,但定位问题可能不是最难的,分析和优化才是最耗时的关键环节,修改之后,要再回归测试,验证是否如预期般有效。
什么是高性能程序?架构致广远、实现尽精微。
架构优化的关键是识别瓶颈,这类优化有很多套路,比如通过负载均衡做分布式改造,比如用多线程协程做并行化改造,比如用消息队列做异步化和解耦,比如用事件通知替代轮询,比如为数据访问增加缓存,比如用批处理+预取提升吞吐,比如IO与逻辑分离、读写分离等等。
架构调整和优化虽然收效很大,却因受限于各种现实因素,因而并不总是可行。
能不做的尽量不做、必须做的高效做是性能优化的一个根本法则,提升处理能力和降低计算量可视为性能优化的两个方向。
怎么让程序跑的更快?这要求我们充分利用硬件的各种特性,想方设法减少等待并且提高并发,提升CACHE命中率,使用更高效的结构和算法;而降低计算量,则可能意味着要跳出纯技术范畴,从产品和业务视角去审视:哪些功能是必须的,哪些功能是可选可配置的。
有时候,我们不得不从细节的维度去改进程序。通常,我们应该使用简单的数据结构和算法,但如有必要,就应积极