复习L3和L4

92 阅读2分钟

L3 高质量编程与性能调优实战

高质量编程

原则: 简单性、可读性、生产力

常见编码规范:

*代码格式 * gofmt自动格式化代码,与官方一致

*注释 * 作用、如何做的、实现的原因、什么情况出错 公共符号始终要注释

命名规范

variable 简洁 缩略词全大写

function 简短,不必携带包名上下文信息

package 小写字母,不能与标注框同名,单数,不用常用变量名

控制流程

避免嵌套 最小缩进 可读


错误和异常处理

简单错误

错误wrap和Unwrap

错误判定 errors.Is 特定的错误 errors.As错误链上获取特定种类的错误

panic 不建议业务中用,程序不能继续

recover 只能在defer中用,嵌套无法生效,当前goroutine,生肖分为

性能优化 benchmark

slice 预分配内存 make()初始化切片时提供容量信息

大内存未释放 copy取代re-slice

map预分配内存

不断向map添加元素会引发扩容

字符串处理

+拼接最差,strings.Builder和bytes.Buffer相近,String.Buffer更快 strings.Builder

空结构体 占位符 不占用空间 set可以考虑用map代替

atomic包 通过硬件实现,而不是锁,效率高

性能调优实战

性能分析工具pprof

采样:CPU heap堆内存 协程goroutine 锁mutex 阻塞block 线程创建

L4 高性能 Go 语言发行版优化与落地实践

自动内存管理

GC 垃圾回收

追踪垃圾回收

引用计算

分代GC

Go内存管理及优化

分块

缓存

Go对象分配的性能问题

分配路径过长

小对象居多

Balanced GC

Go编译器优化

beast mode

函数内联

逃逸分析

通过micro-benchmark 快速验证性能优化

自动内存管理

  • Auto memory management: 自动内存管理
  • Grabage collction: 垃圾回收
  • Mutator: 业务线程
  • Collector: GC 线程
  • Concurrent GC: 并发 GC
  • Parallel GC: 并行 GC
  • Tracing garbage collection: 追踪垃圾回收

    • Copying GC: 复制对象 GC
    • Mark-sweep GC: 标记-清理 GC
    • Mark-compact GC: 标记-压缩 GC
  • Reference counting: 引用计数
  • Generational GC: 分代 GC

    • Young generation: 年轻代
    • Old generation: 老年代

\