这是我参与「第五届青训营 」笔记创作活动的第3天
Go 高质量编程与性能调优
一、本堂课重点内容:
- 本堂课的知识要点有哪些?
- 高质量编程
- 性能调优实战
二、详细知识点介绍:
- 本堂课介绍了哪些知识点?
- 高质量编程
- 高质量编程简介
- 编写的代码达到正确可靠、简洁清晰
- 各种边界是否完备
- 异常情况处理,稳定性保证
- 易读易维护
- 编码规范
- 公共符号始终要注释
- 命名规范,简洁、缩略词大写位于开头时且不需要导出时全小写,变量距离被使用的时候越远,则需要携带越多的信息
- 包名,只有小写字母组成,简短并包含一定的上下文信息,不要与标准库重名
- 错误,简单错误优先使用errors.NEW来创建匿名变量来表示。错误判断:使用errors.Is,不同于==,该方法可以判断错误链上的随意错误是否含有特定的错误,panic,不建议在业务中使用。revover,只在defer的函数中使用,嵌套无法生效
- 性能优化建议
- 流程控制,避免嵌套,保持最小缩进
- slice 预分配,扩容耗费时间,在原切片上创建新的切片会导致内存无法释放,可以用copy代替re-slice
- map 预分配
- 字符串处理,建议使用strings.Builder、bytes.buffer,strings.Builder更快
- 使用空结构体节省内存空间
- atomic包,锁是操作系统实现的,atomic是硬件实现更快,sync.Mutex应该用来保护一段逻辑,不仅仅用来保护变量
- 高质量编程简介
- 性能调优实战
- 性能调优简介
- 性能调优原则:依赖数据而不是猜测,定位最大瓶颈,不要过早优化,不要过度优化
- 性能分析工具pprof实战
- link.juejin.cn/?target=htt…
- 实际分析排查过程
- 性能调优案例
- 业务服务优化
- 基础库优化
- Go语言优化 三、实践练习例子:
- 性能调优简介
- 高质量编程
- 业务服务优化
-
服务:能单独部署,承载一定功能的程序
-
依赖:Service A 的功能实现依赖 Service B 的响应结果,称为 Service A 依赖 Service B
-
调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
-
基础库:公共的工具包、中间件
-
- 流程
- 建立服务性能评估手段
- 分析性能数据,定位性能瓶颈
- 重点优化项改造
- 优化效果验证
- 基础库优化
- 适应范围更广,覆盖更多服务
- AB 实验 SDK 的优化
- 分析基础库核心逻辑和性能瓶颈
- 完善改造方案,按需获取,序列化协议优化
- 内部压测验证
- 推广业务服务落地验证
- Go 语言优化
- 适应范围最广,Go 服务都有收益
- 优化方式
- 优化内存分配策略
- 优化代码编译流程,生成更高效的程序
- 内部压测验证
- 推广业务服务落地验证
四、课后个人总结:
- 本章有什么知识点不容易掌握?
- 性能调优,之前从没有接触过这个,也没有使用过性能调优软件
- 火焰图解析
- 什么地方容易与其他内容混淆?
- strings.builder bytes.buffer