第四节课:高性能Go语言发行版优化与落地实践|青训营笔记

81 阅读2分钟
  • 性能优化\

    • 业务层优化\

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

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

      • 自动化性能分析工具 —— pprof\
      • 依靠数据而非猜测\
      • 首先优化最大瓶颈\
  • 自动内存管理\

    • 动态内存\

      • 程序运行时根据需求动态分配的内存\
    • 自动内存管理(垃圾回收)\

      • 由程序语言运行时系统管理动态内存\
    • 任务\

      • 为新对象分配空间\
      • 找到存活对象\
      • 回收死亡对象的内存空间\
    • 相关概念\

      • mutator\

        • 业务线程,分配新对象,修改对象指向关系\
      • collector\

        • gc对象,找到存活对象,回收死亡对象的内存空间\
      • serial gc\

        • 只有一个collector\
        • \
      • parallel gc\

        • 支持多个collector同时回收的gc算法\
        • \
      • concurrent gc\

        • mutator和collector同时执行\
        • \
      • 评价gc算法\

        • 安全性\

          • 不能回收存活对象\
        • 吞吐率\

          • gc时间/程序总花费时间\
        • 暂停时间\

          • stw业务是否感知\
        • 内存开销\

          • gc元数据开销\
    • 算法\

      • 追踪垃圾回收\
      • 引用计数\
      • 分代gc\

        • 针对不同的对象使用不同的策略\
  • go内存管理及优化\

    • go内存分配\

      • 分块\

        • 为对象在heap上分配内存\
        • 提前将内存分快\

          • 调用系统调用mmap()申请一大块内存\
          • 先将内存划分为大块,称作mspan\

            • noscan mspan\

              • 分配不包含指针的对象\
              • gc不需要扫描\
            • scan mspan\

              • 分配包含指针的对象\
              • gc需要扫描\
          • 再将大块划分为特定大小的小块,用于对象分配\
    • 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: 逃逸分析\