这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
前言
这是小白初接触到Go语言的内容,本课程高质量编程与性能调优实战。主要讲述编码规范、性能优化建议、性能分析工具使用、性能优化流程。
(1) 高质量编码规范
正确性:是否考虑各种边界条件,错误的调用是否能够处理
可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理
简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持
清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题
(2) 性能优化建议
1.性能优化建议-Map->map预分配内存
分析:不断向map中添加元素的操作会触发map的扩容,因此提前分配好空间可以减少内存拷贝和Rehash的消耗,建议建议根据实际需求提前预估好需要的空间
2.性能优化建议-字符串处理->使用strings. Builder
使用+拼接性能最差,strings Builder, bytes. Buffer相近,strings. Buffer更快
分析:字符串在Go语言中是不可变类型,占用内存大小是固定的,因此使用+每次都会重新分配内存,然而strings. Builder, bytes. Buffer底层都是[]byte数组,内存扩容策略,不需要每次拼接重新分配内存。
3.建议总结
避免常见的性能陷阱可以保证大部分程序的性能
普通应用代码,不要一味地追求程序的性能
越高级的性能优化手段越容易出现问题
在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能
(3)性能分析工具pprof使用和性能优化流程:
主要通过一个实践项目来熟悉pprof工具的使用。
1.具体的工具-可以在runtime/pprof中找到源码, 同时Golang的http标准库中也对pprof做了些封装,能在http服务中直接使用。
2.采样部分-可以采样程序运行时的CPU、堆内存、goroutine、 锁竞争、阻塞调用和系统线程的使用数据。
3.展示-用户可以通过列表、调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。一个实践项目来熟悉pprof工具的使用。
小结
以往学习中主要关注功能的实现和代码的完成度,没有非常关注与编程质量和性能的场景,受益匪浅。