这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
课程内容
高质量编程与性能调优实战
高质量编程
- 高质量编程简介
- 编码规范
- 性能优化建议
性能调优实战
- 性能调优
- 性能分析工具 pprof实战
- 性能调优案例
高质量编程
编程原则
- 简单性
- 可读性
- 生产力
编码规范
- 代码格式 gofmt
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
性能优化建议
- 性能优化的前提是满足正确可靠,简洁清晰等质量因素
- 性能优化是综合评估,有时候时间效率和空间效率可能对立
- 针对Go语言特性,介绍Go相关的性能优化建议
Benchmark
go test -bench=. -benchmem
Slice
slice 预分配内存;
陷阱:大内存未释放
Map
map 预分配内存
字符串处理
使用string.Builder
空结构体
使用空结构体节省内存
atomic包
小结
避免常见的性能陷阱可以保证大部分程序的性能;
普通应用代码,不要一味地追求程序的性能;
越高级的性能优化手段越容易出现问题;
在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能
性能调优实战
性能调优原则
要依靠数据不是猜测;
要定位最大瓶颈而不是细枝末节;
不要过早和过度优化
性能分析工具 pprof实战
CPU ProfilingCPU 分析
按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗CPU 周期时花费时间的位置
Memory Profiling内存分析
在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
Block Profiling阻塞分析
记录 goroutine 阻塞等待同步(包括定时器通道)的位置。阻塞分析对分析程序并发瓶颈非常有帮助。
Mutex Profiling互斥锁分析
报告互斥锁的竞争情况。
性能调优案例
实践准备
克隆示例项目到本地,保证能够编译运行
使用 test 命令,编写并测试
使用 -bench 参数进行性能测试