这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
今天课程的主要内容如下:
-
高质量编程
- 编程能够完成功能是基本要求,那么什么是高质量代码,有哪些实践规范,以及常见的性能优化建议有哪些?
-
性能调优实战
- 平时解决算法问题也在追求效率越来越高的算法,在工作中对程序也需要进行不断的优化,这种场景不像算法题那样有明确的流程,如何分析性能瓶颈,使用什么工具,实际服务的优化流程是什么样的会具体说明
1.高质量编程
1.1简介
什么是高质量:编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
编程原则
实际应用场景千变万化,各种语言的特性和语法各不相同。但是高质量编程遵循的原则是相通的
-
简单性
- 消除“多余的复杂性”,以简单清晰的逻辑编写代码
- 不理解的代码无法修复改进
-
可读性
- 代码是写给人看的,而不是机器
- 编写可维护代码的第一 步是确保代码可读网
-
生产力
- 团队整体工作效率非常重要 -- Go语言开发者Dave Cheney
1.2编码规范
如何编写高质量的Go代码,可以从一下5各方面入手:
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
1.3性能优化建议
- 性能优化的前提是满足正确可靠、简洁清晰等质量因素
- 性能优化是综合评估,有时候时间效率和空间效率可能对立
- 针对
Go
语言特性,介绍Go
相关的性能优化建议
高质量的代码能够完成功能,但是在大规模程序部署的场景,仅仅支持正常功能还不够,我们还要尽可能的提升性能,节省资源成本。
接下来就主要介绍性能相关的建议
- 高性能代码为了效率会用到许多技巧,没有相关背景的人难以理解,不过有些基础性能问题是和语言本身相关的,接下来主要介绍这类内容,对应的调整对可读性和可维护性影响不大
- 在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的性能
- 有时候时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷。例如多花费一些内存来提高性能。针对Go语言编程,介绍
Go
相关的性能优化建议
2.性能调优实战
2.1简介
性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
2.2性能分析工具pprof
既然性能调优前提是对应用程序性能表现有实际的数据指标,那么有什么工具能够获得这种数据呢?
对于go程序,有一个很方便的工具就是pprof。具体pprof有哪些内容?
- 分析部分一有两种方式,网页和可视化终端
- 具体的工具-可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了 一些封装,能让你在http服务中直接使用它
- 采样部分-它可以采样程序运行时的CPU、堆内存、goroutine、 锁竞争、 阻塞调用和系统线程的使用数据
- 展示-用户可以通过列表、调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。方便分析 因为pprof的功能比较多,接下来通过一个实践项目来熟悉pprof工具的使用
3.总结
今天主要学习了两方面的内容,高质量编程和性能调优,对于性能调优来说,以下几点需要我们注意:
- 我们性能评估要依靠数据,用实际的结果做决策
- 对于
pprof
工具,可以通过分析实际的程序熟悉相关功能,理解基本原理,后续能够更好地解决性能问题 - 在真正的服务性能调优流程中,链路会很长,重点是要保证正确性,不影响功能,同时定位主要问题
- 真正掌握实操课程,项目中进行应用,项目作业中也会对服务性能进行评估