go基础|青训营笔记

38 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。今天我学习了go语言性能优化。## 性能优化是什么

提升软件系统处理能力,减少不必要的消耗,充分发掘计算机的算力

为什么要做性能优化

用户体验: 带来体验的提升

资源高效利用 :降低 成本,提高效率

性能优化的层面

  • 业务代码 针对特定场景,具体问题,具体分析,容易获得较大性能收益
  • SDK
  • 基础库
  • 语言运行时 (GC 调度器) 解决更通用的性能问题 考虑更多场景

依靠数据而非猜测 首选优化是最大瓶颈

软件质量至关重要

测试用例:覆盖尽可能多的场景,方便回归 文档 隔离 可观测:必要的日志输出

自动内存管理

什么是自动内存管理

  • 动态内存

  • 程序在运行是根据需求动态分配的内存 malloc()

  • 自动内存回收:由程序语言的运行时系统管理动态内存

  • 避免手动管理内存,专注实现业务逻辑

  • 保证内存使用的正确性和安全性 double-free problem user-after-free problem 有很多问题

  • 三个任务

    • 为新对象分配空间
    • 找到存活对象
    • 回收死亡对象的内存空间

自动内存管理 相关概念

-   Mutator 业务线程,分配新对象,修改对象指向关系
-   Collector GC线程,找到存活对象,回收死亡对象的内存空间
-   Serial GC 只有一个Collector
-   Parallel GC 支持多个collectors同时回收的GC算法
-   Concurrent GC mutator(s)和collector(s)可以同时进行