后端青训营Day4笔记 | 青训营笔记

132 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

语言发行版优化与落地实践

性能优化的层面

  • 业务层优化

    • 针对特定场景,具体问题,具体分析

    • 容易获得较大的性能收益

  • 语言运行时的优化

    • 解决更通用的性能问题

    • 考虑更多场景

    • Tradesoffs

  • 数据驱动

    • 自动化性能分析工具 ——pprof

    • 依靠数据而非猜测

    • 首先优化最大瓶颈

性能优化与软件质量

  • 软件质量至关重要

  • 再熬正接口稳定的前提下改进具体实现

  • 测试用例:覆盖尽可能多的场景,方便回归

  • 文档:做了什么,没做什么,能达到怎样的效果

  • 隔离:必须通过选项控制是否开启优化

  • 可观测:必要的日志输出

1、自动内存管理

1.1 自动内存管理

1.2 追踪垃圾回收

1.3 分代GC

1.4 引用计数

总结

  • 自动内存管理的背景和意义

  • 概念和评价方法

  • 追踪垃圾回收

  • 引用计数

  • 分代GC

2.Go内存管理以及优化

2.1Go内存分配——分块

2.2Go内存管理优化

2.3优化方案 Balanced Gc

总结

  • Go内存管理——分块

  • Go内存管理——缓存

  • Go——分配对象的性能问题

    • 分配路径过长

    • 小对象居多

  • Balanced GC

    • 指针碰撞风格的对象分配

    • 实现了copying GC

    • 性能收益

3 编译器和静态分析

3.1编译器结构

3.2 静态分析

3.3过程内分析和过程间分析

4.Go编译器优化

  • 为什么做编译器优化?

    • 用户无感知,重新编译即可获得性能收益

    • 通用性优化

  • 现状

    • 采用的优化少

    • 编译时间较短,没有进行较复杂的代码分析和优化

  • 编译优化的思路

    • 场景:面向后端长期执行任务

    • Tradeoff:用编译时间换取更高效的机器码

  • Beast mode

    • 函数内联

    • 逃逸分析

    • 默认栈大小调整

    • 边界检查消除

    • 循环展开

4.1函数内联(Inlining)

4.2Beast Mode

逃逸分析

总结

  • go编译器优化的问题

  • Beast mode

  • 函数内联

  • 逃逸分析

  • 通过micro-benchmark快速验证性能优化

  • 性能收益

总结

  • 本节课程:高性能Go语言发行版优化与落地实践

  • 性能优化

    • 自动内存管理

    • Go内存管理

    • 编译器与静态分析

    • 编译器优化

  • 时间

    • Balanced Gc优化对象分配

    • Beast mode提升代码性能

  • 分析问题的方法与解决问题的思路