GO 语言原理与实践 | 青训营

37 阅读2分钟

自动内存管理

  • Auto memory management: 自动内存管理
  • Grabage collction: 垃圾回收
  • Mutator: 业务线程
  • Collector: GC 线程
  • Concurrent GC: 并发 GC
  • Parallel GC: 并行 GC
  • Tracing garbage collection: 追踪垃圾回收

    • Copying GC: 复制对象 GC
    • Mark-sweep GC: 标记-清理 GC
    • Mark-compact GC: 标记-压缩 GC
  • Reference counting: 引用计数
  • Generational GC: 分代 GC

    • Young generation: 年轻代

    • Old generation: 老年代

GO内存管理及优化

  • TCMalloc
  • mmap() 系统调用
  • scan object 和 noscan object
  • mspan, mcache, mentral
  • Bump-pointer object allocation: 指针碰撞风格的对象分配

编译器与静态分析

  • 词法分析
  • 语法分析
  • 语义分析
  • Intermediate representation (IR) 中间表示
  • 代码优化
  • 代码生成
  • Control flow: 控制流
  • Data flow: 数据流
  • Intra-procedural analysis 过程内分析
  • Inter-procedural analysis: 过程间分析

GO编译器优化

  • Function inlining: 函数内联
  • Escape analysis: 逃逸分析

引言

  • 什么是性能优化?

    • 提升软件系统处理能力减少不必要的消耗,充分发掘计算机算力
  • 为什么要做性能优化?

    • 用户体验:带来用户体验的提升 —— 让刷抖音更丝滑,让双十一购物不再卡顿
    • 资源高效利用:降低成本,提高效率 —— 很小的优化乘以海量机器会是显著的性能提升和成本节约
  • 性能优化

    • 业务层优化

      • 针对特定场景,具体问题,具体分析
      • 容易获得较大性能收益
    • 语言运行时优化

      • 解决更通用的性能问题
      • 考虑更多场景
      • Tradeoffs
    • 数据驱动

      • 自动化性能分析工具 —— pprof
      • 依靠数据而非猜测
      • 首先优化最大瓶颈
  • 软件质量

    • 保证接口稳定的前提下改进实现

image.png

  • 测试驱动
  • 通过清晰的文档告诉用户这一项优化做了什么没做什么能达到怎样的效果
  • 隔离,优化代码用选项和原先的路径隔离,保证优化未启用时的行为同以前一致
  • 可观测、可灰度、可回滚