Go基础Part3 | 青训营笔记

50 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

课程内容

高质量编程与性能调优实战

高质量编程

  • 高质量编程简介
  • 编码规范
  • 性能优化建议

性能调优实战

  • 性能调优
  • 性能分析工具 pprof实战
  • 性能调优案例

高质量编程

编程原则

  • 简单性
  • 可读性
  • 生产力

编码规范

  • 代码格式 gofmt
  • 注释
  • 命名规范
  • 控制流程
  • 错误和异常处理

性能优化建议

  • 性能优化的前提是满足正确可靠,简洁清晰等质量因素
  • 性能优化是综合评估,有时候时间效率和空间效率可能对立
  • 针对Go语言特性,介绍Go相关的性能优化建议

Benchmark

go test -bench=. -benchmem

Slice

slice 预分配内存;

陷阱:大内存未释放

Map

map 预分配内存

字符串处理

使用string.Builder

空结构体

使用空结构体节省内存

atomic包

小结

避免常见的性能陷阱可以保证大部分程序的性能;

普通应用代码,不要一味地追求程序的性能;

越高级的性能优化手段越容易出现问题;

在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能

性能调优实战

性能调优原则

要依靠数据不是猜测;

要定位最大瓶颈而不是细枝末节;

不要过早和过度优化

性能分析工具 pprof实战

CPU ProfilingCPU 分析

按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗CPU 周期时花费时间的位置

Memory Profiling内存分析

在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏

Block Profiling阻塞分析

记录 goroutine 阻塞等待同步(包括定时器通道)的位置。阻塞分析对分析程序并发瓶颈非常有帮助。

Mutex Profiling互斥锁分析

报告互斥锁的竞争情况。

image.png

性能调优案例

实践准备

克隆示例项目到本地,保证能够编译运行

使用 test 命令,编写并测试

使用 -bench 参数进行性能测试