 Go性能优化概览-曹春晖hash 成本太⾼ -> 使⽤ cityhash,murmurhash • 其它应⽤逻辑 -> case by case 分析了 • GC 使⽤ CPU 过⾼ • 减少堆上对象分配 • sync.Pool 进⾏堆对象重⽤ • Map -> slice • 指针 -> ⾮指针对象 • 多个⼩对象 -> 合并为⼀个⼤对象 • offheap • 降低 GC 频率 • 修改 GOGC 减少 goroutine 的创建与销毁 • 控制最⼤ goroutine 数量 总结⼀下 • 内存使⽤过⾼ • 堆内存占⽤内存空间过⾼ • sync.Pool 对象复⽤ • 为不同⼤⼩的对象提供不同⼤⼩ level 的 sync.Pool • 松散的对象调整为紧凑的对象,如:map -> slice,查找时间复杂度增加,但内存使⽤ 降低 • offheap • 邪道:动态调整 GOGC0 码力 | 40 页 | 8.69 MB | 1 年前3 Go性能优化概览-曹春晖hash 成本太⾼ -> 使⽤ cityhash,murmurhash • 其它应⽤逻辑 -> case by case 分析了 • GC 使⽤ CPU 过⾼ • 减少堆上对象分配 • sync.Pool 进⾏堆对象重⽤ • Map -> slice • 指针 -> ⾮指针对象 • 多个⼩对象 -> 合并为⼀个⼤对象 • offheap • 降低 GC 频率 • 修改 GOGC 减少 goroutine 的创建与销毁 • 控制最⼤ goroutine 数量 总结⼀下 • 内存使⽤过⾼ • 堆内存占⽤内存空间过⾼ • sync.Pool 对象复⽤ • 为不同⼤⼩的对象提供不同⼤⼩ level 的 sync.Pool • 松散的对象调整为紧凑的对象,如:map -> slice,查找时间复杂度增加,但内存使⽤ 降低 • offheap • 邪道:动态调整 GOGC0 码力 | 40 页 | 8.69 MB | 1 年前3
 2.2.6 字节跳动在 Go 网络库上的实践write growth copy copy will data race 优化 Buffer 设计 – LinkBuffer 设计 1. 链表解决 growth copy 2. sync.Pool 复用节点 3. atomic 访问 size 解决 data race Q: 为什么业界没使用 LinkBuffer ? A: 无法使用 Read/Write API Read([]byte)0 码力 | 42 页 | 3.19 MB | 1 年前3 2.2.6 字节跳动在 Go 网络库上的实践write growth copy copy will data race 优化 Buffer 设计 – LinkBuffer 设计 1. 链表解决 growth copy 2. sync.Pool 复用节点 3. atomic 访问 size 解决 data race Q: 为什么业界没使用 LinkBuffer ? A: 无法使用 Read/Write API Read([]byte)0 码力 | 42 页 | 3.19 MB | 1 年前3
共 2 条
- 1













