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

66 阅读2分钟

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

前言

想着把之前的一下子补完还是有点困难,那就每天尽量把当天内容学到哪整理到哪吧,之后再补充和完善,加上自己的思考。

可能跟着视频码字的第一版笔记并不是很有用,精力投入不多,且被限制了思考,我会在调整过学习和比赛作息之后在课程以外做更多的资料查阅,并补充到这里,显得不那么浅显单调乏味。

一、概览

优化:(提升软件系统处理能力,减少不必要的消耗,发掘计算机算力,为了优化用户体验和资源高效利用)

1.内存管理优化

2.编译器优化

背景:

1.自动内存管理和Go内存管理机制

2.编译器优化的基本问题和思路

实践:

1.字节跳动遇到的性能问题以及优化方案

性能优化的层面:

业务层优化:

  • 1.针对特定场景,具体问题具体分析
    
  • 2.容易获得较大的性能收益
    

    语言运行时优化:

  • 1.解决更通用的性能问题
    
  • 2.考虑更多的场景
    
  • 3.Tradeoffs
    

    数据驱动:

  • 1.自动化性能分析工具——pprof
    
  • 2.依靠数据而非猜测
    
  • 3.首先优化最大瓶颈
    

性能优化与软件质量:

1.在保证接口稳定的前提下改进具体实现

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

3.文档:做了/没做什么,能达到什么样的效果

4.隔离:通过选项控制是否开启优化

5.可观测:必要的日志输出

二、自动内存管理

2.1

1.动态内存:程序在运行时根据需求动态分配内存

2.垃圾回收:由程序语言运行时系统管理动态内存,避免手动管理,专注于实现业务逻辑,并保证内存使用的正确性和安全性。

3.三个任务:1)为新对象分配空间 2)找到存活的对象 3)回收死亡对象的空间

2.2

相关概念:

  • Mutator:业务线程,分配新对象,修改对象指向关系
    
  • Collector:GC线程,找到存活对象,回收死亡对象的内存
    
  • Serial GC:只有一个collector
    
  • Parallel GC:支持多个collectors同时回收的GC算法
    
  • Concurrent GC:mutators和collectors可以同时执行
    
  • (Collectors必须感知对象指向关系的改变)
    

暂时先到这

希望能和dalao们一样,以一种更严谨认真的态度,像发表博文一样对待这个笔记。加油。

引用

字节内部课

标题:性能优化及自动内存管理 - 掘金

网址:juejin.cn/course/byte…