Go语言从入门到实战 笔记17 性能调优
47 | 性能分析工具
使用go语言自带的性能分析函数,创建cpu profile
使用命令看下函数执行的性能指标
list fillMatrix 做函数方法的性能深入分析
使用 go-torch cpu.prof 生成火焰图
再查看memory的使用情况
48 | 性能调优示例
Wall time : 程序执行时间
Cpu time : cpu执行时间
Block time : 程序阻塞时间
把请求序列化
请求反序列化成为字符串,拼接后返回结对象repObj; 再把结果对象序列化成为一个json
换一下json的反序列化函数,再次测试性能如下,耗时从670ms变成了480ms
字符串拼接耗时630ms,内存使用了1.55GB,改成用strings.Builder,如下
耗时从630ms 下降到180ms
内存占用从1.55GB下降到132.05MB
49 | 别被性能锁住
开了40个协程去读取内容
使用lock的读锁控制并发
可以发现,使用的读锁RLock,对cpu性能产生了很大的消耗,修改时会锁住整个map
此种map是分成只读区域read 和 可写的区域Dirty, dirty里面查找是需要加锁的
如果从只读read区域读取,miss很多次,就会从dirty区域把数据同步到read,更新过程采用CompareAndSwap
使用了分段锁
50 | GC 友好的代码
传引用性能好很多
以上就是输出的trace信息
切片初始化为合适的大小,减少自动扩容导致的性能损耗