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

49 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第 3 篇笔记。

本篇主要内容框架

image.png

高质量编程

高质量编程简介

image.png

编码规范

image.png

代码格式

推荐使用gofmt自动化格式代码

image.png

错误和异常处理

image.png

image.png

错误判定

image.png

image.png

image.png

image.png

性能优化建议

image.png

image.png

字符串处理

image.png

image.png

image.png

image.png

atomic包

  • 锁的实现是通过操作系统来实现,属于系统调用,atomic 操作是通过硬件实现的,效率比锁高很多

  • sync.Mutex 应该用来保护一段逻辑,不仅仅用于保护一个变量

  • 对于非数值系列,可以使用 atomic.Value,atomic.Value 能承载一个 interface{}

image.png

性能调优实战

性能调优简介

性能分析工具pprof实战

性能分析工具pprof 在开始前要提前安装graphviz: 相关的一些pprof使用教程:segmentfault.com/a/119000001… darjun.github.io/2021/06/09/…

image.png

image.png

性能调优案例

cpu的查看

运行程序后在终端输入命令 go tool pprof "http://localhost:6060/debug/pprof/profile?second=10" image.png 在弹出(pprof)后输入top可具体查看

image.png

在定位到耗用cpu最高的函数后,输入 list 对应函数名

image.png 输入命令web

image.png

堆空间的使用

使用ui视图直观查看,在localhost:8080/ui上查看 go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap" image.png

协程grooutine的情况

只需要把后缀换一下就行 go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/grooutine"

image.png

mutex锁

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex" image.png

阻塞block

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block" image.png

总结

image.png

性能调优案例

业务服务的优化

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

基础库的优化

image.png

go语言的优化

image.png

总结

image.png