这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
高质量编程与性能调优实战
一、高质量编程
高质量:编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
各种边界条件是否考虑完备
异常情况处理,稳定性保证
易读易维护
编程原则:实际应用场景千变万化,各种语言的特性和语法各不相同但是高质星编程循的原则是相通的
1、简单性 2、可读性 3、生产力
编码规范
代码格式:gofmt、goimports
注释:解释代码作用、提供上下文信息、解释外部因素、限制条件、公共符号始终要注释
命名规范:简洁、大小写、上下文信息
控制流程:最小缩进、线性原理,避免复杂嵌套、可维护性和可读性
错误处理:Wrap、Unwrap、errors.Is、errors.As、panic、recover、
二、性能调优实战
性能表现需要实际教据衡量
Go语言提供了支持基准性能测试的基准测试工具
切片预分配内存
尽可能在使用make()初始化切片时提供容量信息
map预分配内存分析
使用string s.Builder
·使用+拼接性能最差,string s.Builder,bytes.Buffer相近,string s.Buffer更快
·字符串在Go语言中是不可变类型,占用内存大小是固定的·使用+每次都会重新分配内存
缓存器底层都是字节数组·内存扩容策略,不需要每次拼接重新分配内存
空结构体
atomic包
pprof性能分析工具
topN
list
web
Heap-堆内存
goroutine-协程
mutex=锁
block-锁
2.2.3性能分析工具pprof-采样过程和原理>Heap-堆内存
·采样程序通过内存分配器在堆上分配和释放的内存,记录分配释放的大小和数量·采样率:每分配512 KB记录一次,可在运行开头修改,l为每次分配均记录
·采样时间:从程序运行开始到采样时
·采样指标:alloc_space,alloc obiects.inuse gpace.inuge obiect 090。计算方式:inuge=alloc-free
-服务性能评估方式
-单独Benchmark无法满足复杂逻辑分析·不同负载情况下性能表现差异
请求流星构造
-不同请求参数贾盖逻辑不同·线上真实流星情况
·压测范围
单机器压测集群压测·性能数据采集