跳到主要内容

性能优化知识体系概览

问题

Go 性能优化有哪些方面?整体思路是什么?

答案

优化思路

优化原则
  1. 先测量,后优化:没有数据的优化是瞎猜
  2. Benchmark 驱动:优化前后必须 Benchmark 对比
  3. 抓大放小:先优化热点函数(Top 10%)
  4. 避免过早优化:先保证正确,再提升性能

优化层次

层次手段效果
算法更优算法/数据结构⭐⭐⭐⭐⭐
架构缓存、异步、批处理⭐⭐⭐⭐
内存减少分配、对象池⭐⭐⭐
并发goroutine 池、减少锁⭐⭐⭐
IO批量读写、连接池⭐⭐⭐
编译编译优化、PGO⭐⭐

Go 性能工具链

工具用途
go test -benchBenchmark 基准测试
pprofCPU / 内存 / goroutine 分析
go tool trace调度/GC/网络事件追踪
benchstatBenchmark 结果统计对比
-race竞态检测
-gcflags="-m"逃逸分析

常见面试问题

Q1: Go 程序遇到性能问题应该怎么排查?

答案

1. 确认症状:CPU 高?内存增长?延迟大?QPS 上不去?
2. pprof 采集:CPU profile / Heap profile / Goroutine
3. 分析热点:Top 函数 → 调用链 → 源码行
4. Benchmark 复现:写 Benchmark 隔离问题
5. 优化 + 验证:修改代码 → Benchmark 对比 → 线上验证

Q2: Go 相比 Java 在性能上有什么优劣?

答案

  • 优势:编译为原生代码(无 JIT 预热)、goroutine 轻量(创建成本极低)、GC 延迟短
  • 劣势:缺少 JIT 的运行时优化(PGO 是编译时的)、泛型性能仍有可优化空间

相关链接