【day3】Go 高质量编程与性能调优 | 青训营笔记

105 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 3 天

要点
1.编码规范介绍
2.Go 语言的性能优化建议与原理介绍
3.常用性能分析工具 pprof 的使用和工作原理剖析
4.性能调优业务案例分析

课程1-高质量编程简介及编码规范

1.高质量编程简介
a.各种边界条件是否考虑完备
b.异常情况处理,稳定性保证
C.易读易维护

2.如何编写高质量代码
a.代码格式
b.注释
c.命名规范
d.控制流程
e.错误和异常处理

3.小结
1.error尽可能提供简明的上下文信息链,方便定位问题
2.panic用于真正的异常情况
3.recover生效范围,在当前goroutine的被defer的函数中生效

课程2-性能优化指南

性能优化建议
a.Slice。
尽可能在使用make()初始化切片时提供容量信息,可以避免过多的扩容拷贝过程
大slice切片出小slice尽可能使用copy替代re-slice【以防止大slice被继续引用而不被内存回收】
b.Map。
与Slice一样,尽可能初始化切片容量
c.字符串处理
如果进行多次字符串拼接【在循环中】,则尽可能使用StringBuilder或者StringBuffer
d.结构体
使用空结构体struct{}节省内存【不占用任何内存,可以用来做占位符】,比如要实现Set,可以将map的value设置为struct{}
e.atomic包
多线程并发使用atomic包【能提高效率】

课程3-性能优化分析工具

1.性能调优原则 a.依靠数据,而不是猜测
b.定位最大瓶颈,而不是细枝末节
c.不要过早优化
d.不要过度优化

2.pprof
可以查看Cpu,堆内存-Heap,协程-Goroutine,锁-Mutex,阻塞-Block,线程创建-ThreadCreate
flat:函数本身的消耗
cum:函数本身及调用的函数的消耗
flat==cum:函数中没有调用其他函数
flat==0:函数中只有其他函数的调用

课程4-性能调优实战案例

1.CPU
采样对象:函数调用和他们站用的时间
采样率:100次/秒

2.Heap-堆内存
采样程序通过内存分配器在堆上分配和释放内存,记录分配/释放的大小和数量
采样率:每分配512KB记录一次
采样指标:4个

3.Goroutine&TreadCreate
Goroutine:记录所有用户发起且在运行中的协程
TreadCreate:记录程序创建的所有系统线程信息

4.Block&Mutex
Block:
采样阻塞操作的次数和耗时 采样率:阻塞耗时超过阈值时被记录
Mutex:
采样争抢锁的次数和耗时
采样率:只记录固定比例的锁的操作

业务服务优化
流程: a.建立服务性能评估手段
b.分析性能数据,定位性能瓶颈
c.重点优化改造
d.优化效果验证

总结:
1.性能调优原则:依靠数据,而不是猜测
2.性能分析工具pprof:熟练使用并且了解原理
3.性能调优:保证正确性;定位主要瓶颈