高质量编程&性能调优实战 | 青训营后端

48 阅读3分钟

高质量编程

  • 高质量

    • 编写的代码能够达到正确可靠、简洁清晰的目的。

    • 高质量编程原则:

      简单性:逻辑简单清晰,消除多余的复杂。

      可读性:人可看懂,编写可维护代码

      生产力:团队整体工作效率很重要

  • 编码规范

    • 代码格式:推荐使用gofmt自动格式化代码。
    • 注释:注解代码作用、如何做、如何实现以及出错情况。
    • 命名规范:对于变量,应尽量简洁,缩略词大写,全局变量在名字上需要更多的上下文信息,使得可以在其他地方轻易辨认出其含义;对于函数,应尽量简短,可不携带上下文信息(包名和函数名成对出现);对于package只由小写字母组成,不包含大写字母和下划线,且不要与标准库同名。
    • 控制流程:避免嵌套,保持正常流程清晰;尽量保持正常代码路径为最小缩进。
    • 错误和异常处理:error尽可能提供上下文信息方便排查问题;panic用于真正异常的情况,可用defer和recover捕获错误。
  • 性能优化简易

    • benchmark用于基准测试性能
    • slice和map预分配内存,如slice和map分配内存时,尽可能一次分配足够的内容,避免频繁的扩容,较少拷贝和rehash的消耗。
    • 字符串处理,用+拼接性能很差,建议使用strings.Builder或strings.Buffer,避免使用+拼接每次重新分配内存。
    • 使用空结构体节省内存,空结构体struc{}不占内存空间,如在map中用其做占位符。
    • 使用atomic包,通过硬件实现效率比锁高。

性能调优实战

  • 性能调优原则

    要依赖数据而不是猜测

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

    不要过早优化

    不要过度优化

  • 性能分析工具pprof

    • pprof是一种性能分析工具,它可以用于分析程序的 CPU 使用率、内存分配、锁竞争等性能方面的信息,从而帮助开发人员进行性能优化和问题定位。
  • pprof提供了一系列的函数和工具,可以将程序的性能数据输出到文件,然后使用工具进行分析和可视化。

    测试用例 github.com/wolfogre/go…

    常用的 pprof 函数和命令行工具有:

    • runtime/pprof 包:这个包提供了一系列函数,如 StartCPUProfileStopCPUProfile,可以用来生成 CPU 使用率的分析数据。还有 WriteHeapProfile 函数,用于生成内存分配数据。你可以将这些数据输出到文件,然后使用其他工具进行分析。

    • go tool pprof 命令:这是 Go 语言自带的一个命令行工具,可以用来分析和可视化 pprof 生成的性能数据文件。你可以通过命令行直接使用它,例如:

      go tool pprof cpu.pprof:分析 CPU 使用率数据

      go tool pprof mem.pprof:分析内存分配数据

    • Web 接口:net/http/pprof 包提供了一个 HTTP 服务器,可以通过浏览器访问分析结果。你可以在代码中导入这个包,并将它添加到你的 HTTP 处理器中。

      使用 pprof 可以帮助你定位代码中的性能问题,找出瓶颈,了解内存分配情况,查看 goroutine 使用情况等。但是需要注意,pprof 也会有一些性能开销,所以在生产环境中使用时要谨慎。更多关于 pprof 的详细信息可以在官方文档中找到。

      在学习过程中,掌握常用的pprof工具功能,灵活运用pprof工具分析解决性能问题,了解pprof的采样过程和工作原理。

    学习感悟

    在高性能编程和性能调优实战这一章节,更需要比较深的知识储备。不同的应用场景可能会有不同的优化策略,因此不断学习和实践是提升性能编程能力的关键。在实践中积累经验,不断学习,与时俱进!