Go性能优化| 青训营笔记

52 阅读2分钟

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

今天的录播课我们学了Go语言性能优化及内存管理的知识。主要分为四个知识点:自动内存管理、Go内存管理及优化、编译器和静态分析、Go编译器优化。

在开发大型软件系统时,由于系统复杂,性能问题会逐渐凸显出来。为了提升用户体验、高效利用资源,我们要进行性能优化。性能优化用来提升软件系统处理能力,减少不必要消耗,充分发挥计算机算力。

性能优化主要分为业务层优化和语言运行时优化。前者针对特定场景,容易获得较大性能收益;后者能解决更通用的性能问题,考虑到更多场景。另外在性能优化中也需要注意数据驱动,例如利用上节课学到的自动化性能分析工具pprof,依靠数据进行优化,首先优化最大的性能瓶颈,这样有利于性能优化工作的进行。

性能优化与软件质量息息相关,在性能优化的过程中需要保证软件接口稳定。并且需要提供充分的用户文档告诉用户优化内容和效果。

现在较为广泛使用的编程语言均实现了自动内存管理功能。相较于手动内存管理,自动内存管理能让程序员专注于实现业务逻辑,也保证了内存使用的正确性和安全性。

自动内存管理的三个任务为为新对象分配空间、找到存活对象和回收死亡对象的内存空间。业务线程mutator在运行中分配新对象和改变对象指向关系,garbage collector线程负责找到存活对象并进行内存回收。根据GC数量不同,有serial GC, parallel GC, concurrent GC三种方法。前两者会导致中断,但concurrent要求collector能感知到对象指向关系的改变。