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

19 阅读4分钟

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

今天课程的主要内容如下:

  1. 高质量编程

    • 编程能够完成功能是基本要求,那么什么是高质量代码,有哪些实践规范,以及常见的性能优化建议有哪些?
  2. 性能调优实战

    • 平时解决算法问题也在追求效率越来越高的算法,在工作中对程序也需要进行不断的优化,这种场景不像算法题那样有明确的流程,如何分析性能瓶颈,使用什么工具,实际服务的优化流程是什么样的会具体说明

image.png

1.高质量编程

1.1简介

什么是高质量:编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码

  1. 各种边界条件是否考虑完备
  2. 异常情况处理,稳定性保证
  3. 易读易维护

编程原则

实际应用场景千变万化,各种语言的特性和语法各不相同。但是高质量编程遵循的原则是相通的

  • 简单性

    • 消除“多余的复杂性”,以简单清晰的逻辑编写代码
    • 不理解的代码无法修复改进
  • 可读性

    • 代码是写给人看的,而不是机器
    • 编写可维护代码的第一 步是确保代码可读网
  • 生产力

    • 团队整体工作效率非常重要 -- Go语言开发者Dave Cheney

1.2编码规范

如何编写高质量的Go代码,可以从一下5各方面入手:

  1. 代码格式
  2. 注释
  3. 命名规范
  4. 控制流程
  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工具的使用

image.png

3.总结

今天主要学习了两方面的内容,高质量编程和性能调优,对于性能调优来说,以下几点需要我们注意:

  1. 我们性能评估要依靠数据,用实际的结果做决策
  2. 对于pprof工具,可以通过分析实际的程序熟悉相关功能,理解基本原理,后续能够更好地解决性能问题
  3. 在真正的服务性能调优流程中,链路会很长,重点是要保证正确性,不影响功能,同时定位主要问题
  4. 真正掌握实操课程,项目中进行应用,项目作业中也会对服务性能进行评估