这是我参与「第五届青训营」伴学笔记创作活动的第 14 天
本节重点
本节课主要讲的是高性能 Go 语言发行版优化和落地实践,优化包括内存管理优化和编译器优化。
背景:自动内存管理和 Go 内存管理机制;编译器优化的基本问题和思路。
追求极致性能
性能优化是什么?
性能优化是提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力。
为什么要做性能优化?
用户体验方面:可以给用户带来体验的提升 —— 比如,让刷抖音更丝滑,让双十一购物不卡。
从资源高效利用方面:降低成本,提高效率 —— 比如,很小的优化乘以海量机器会是显著的性能提升和成本节约。
优化层面问题
业务层面优化:针对特定场景,具体问题,具体分析;容易获得较大性能收益。
语言运行时优化:解决更多通用的性能问题;考虑更多场景;Tradeoffs。
数据驱动时优化:自动化性能分析工具 —— pprof;依靠数据而非猜测;首先优化最大瓶颈。
性能优化与软件质量
软件质量至关重要,需要在保证接口稳定的前提下改进具体实现,测试用例要覆盖尽可能多的场景,方便回归。
可以给用户做一个文档,写下做了什么,没做什么以及优化之后能达到怎样的效果,这样用户就能根据他自己的应用场景来开启所需要的优化。
要保证优化代码的合理性,因为一般来说我们的优化都是在一个已有的流程里面去添加一些新的功能,此处隔离性指的是,首先先要用选项来控制是否开启优化,并且能够保证,当我们没有开启优化时,与之前没有合并进来优化代码的时候要一样,保持行为的一致性。这样才不会打扰到不开启优化时的一些功能。
最后需要实现优化的可观测性,开启优化之后,需要给出一些必要的日志输出。
阶段小结
这节课学习了性能优化的一些作用,在不同优化层面的一些问题,以及软件优化与软件质量的关系,在优化过程中需要做哪些事情以便优化。