高质量编程与性能调优实战| 青训营笔记

66 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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无法满足复杂逻辑分析·不同负载情况下性能表现差异

请求流星构造

-不同请求参数贾盖逻辑不同·线上真实流星情况

·压测范围

单机器压测集群压测·性能数据采集