这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
语言发行版优化与落地实践
性能优化的层面
-
业务层优化
-
针对特定场景,具体问题,具体分析
-
容易获得较大的性能收益
-
-
语言运行时的优化
-
解决更通用的性能问题
-
考虑更多场景
-
Tradesoffs
-
-
数据驱动
-
自动化性能分析工具 ——pprof
-
依靠数据而非猜测
-
首先优化最大瓶颈
-
性能优化与软件质量
-
软件质量至关重要
-
再熬正接口稳定的前提下改进具体实现
-
测试用例:覆盖尽可能多的场景,方便回归
-
文档:做了什么,没做什么,能达到怎样的效果
-
隔离:必须通过选项控制是否开启优化
-
可观测:必要的日志输出
1、自动内存管理
1.1 自动内存管理
1.2 追踪垃圾回收
1.3 分代GC
1.4 引用计数
总结
-
自动内存管理的背景和意义
-
概念和评价方法
-
追踪垃圾回收
-
引用计数
-
分代GC
2.Go内存管理以及优化
2.1Go内存分配——分块
2.2Go内存管理优化
2.3优化方案 Balanced Gc
总结
-
Go内存管理——分块
-
Go内存管理——缓存
-
Go——分配对象的性能问题
-
分配路径过长
-
小对象居多
-
-
Balanced GC
-
指针碰撞风格的对象分配
-
实现了copying GC
-
性能收益
-
3 编译器和静态分析
3.1编译器结构
3.2 静态分析
3.3过程内分析和过程间分析
4.Go编译器优化
-
为什么做编译器优化?
-
用户无感知,重新编译即可获得性能收益
-
通用性优化
-
-
现状
-
采用的优化少
-
编译时间较短,没有进行较复杂的代码分析和优化
-
-
编译优化的思路
-
场景:面向后端长期执行任务
-
Tradeoff:用编译时间换取更高效的机器码
-
-
Beast mode
-
函数内联
-
逃逸分析
-
默认栈大小调整
-
边界检查消除
-
循环展开
-
4.1函数内联(Inlining)
4.2Beast Mode
逃逸分析
总结
-
go编译器优化的问题
-
Beast mode
-
函数内联
-
逃逸分析
-
通过micro-benchmark快速验证性能优化
-
性能收益
总结
-
本节课程:高性能Go语言发行版优化与落地实践
-
性能优化
-
自动内存管理
-
Go内存管理
-
编译器与静态分析
-
编译器优化
-
-
时间
-
Balanced Gc优化对象分配
-
Beast mode提升代码性能
-
-
分析问题的方法与解决问题的思路