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信息

切片初始化为合适的大小,减少自动扩容导致的性能损耗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值