Go 1.26在性能方面做了哪些提升?

Go 1.26 的性能提升主要集中在新的 Green Tea GC、cgo 调用开销、小对象分配、切片栈分配以及标准库热点函数几个方面。 对大多数后端 / 服务型程序来说,这是一次"白送"的吞吐量和延迟优化升级,无需改代码即可受益。 go

垃圾回收:Green Tea GC 成为默认

  • 之前处于实验阶段的 Green Tea GC 在 1.26 中正式成为默认 GC,实现方式改为按连续内存块(span)批量扫描,从"按对象随机访问"变为"按页顺序扫描",显著改善 CPU cache 命中率。 zenn
  • 官方基准测试显示,在大量依赖 GC 的真实程序中,GC 开销通常可下降约 10--40%,在请求 99 分位延迟、整体 CPU 占用上都有明显改善。 portallinuxferramentas.blogspot
  • 在 Intel Ice Lake、AMD Zen 4 及更新的 amd64 平台上,GC 还能利用向量指令扫描小对象,额外再降低约 10% 左右的 GC 开销。 tonybai

cgo 调用开销下降

  • Go 1.26 将 cgo 调用的基线运行时开销降低了大约 30%,这来自于运行时内部对 cgo 边界切换和线程复用逻辑的优化。 go
  • 对于频繁调用 C 库(如加解密、图像/视频处理、数据库驱动)的服务来说,这些跨边界调用在同样负载下会明显更快,部分场景的延迟提升甚至可达到约 30--40%。 uradical

小对象分配与切片栈分配

  • 运行时为 1--512 字节的小对象新增了按大小"专门化"的分配路径,通过跳转表快速选择对应的 allocator,相比统一通用实现,小对象分配成本在这些场景下可降低最多约 30%。 antonz
  • 编译器现在可以在更多场景下把切片的底层数组放在栈上,而不是堆上,从而减少 GC 需要管理的堆对象数量,间接提升运行时性能和降低 GC 压力。 infoworld

标准库热点路径优化

  • io.ReadAll 经过重写,现在在多数输入规模下大约快一倍,同时总内存分配量通常减少约一半,返回的最终切片也会更接近真实大小,减少浪费。 webdelo
  • 这些优化叠加 GC 与分配器的改进,使得典型的 I/O 密集型 HTTP 服务、日志聚合、文件处理工具在不改代码的前提下就能获得更好的吞吐量和更低的内存占用。 go

对你意味着什么?

  • 如果你的服务是典型的微服务 / Web API,存在大量小对象分配、JSON 编解码、I/O 操作,升级到 1.26 一般会看到 GC CPU 时间、整体 CPU 利用率和尾延迟都有可观下降。 zenn
  • 如果有大量 cgo 或 syscall 热点(调用 C 库、数据库驱动、系统 API),1.26 的跨边界优化会直接降低这些热点的开销,有利于在相同硬件上跑更多 QPS 或降低云资源成本。 go

如果你愿意贴出当前线上某个服务的 pprof(特别是 gc, allocs, cgo 相关),可以一起具体分析升级到 1.26 后哪些指标最可能改善、该关注哪些基准测试。

相关推荐
CHANG_THE_WORLD1 小时前
深入理解C语言指针运算与数据搜索
c语言·开发语言
大尚来也1 小时前
Spring Boot 集成 Nacos 完全指南:从配置中心到服务发现一站式实战
spring boot·后端·服务发现
逆境不可逃1 小时前
【从零入门23种设计模式04】创建型之原型模式
java·后端·算法·设计模式·职场和发展·开发·原型模式
DokiDoki之父1 小时前
边写软件边学kotlin(二)——语法推进
开发语言·微信·kotlin
清水白石00810 小时前
突破并行瓶颈:Python 多进程开销全解析与 IPC 优化实战
开发语言·网络·python
百锦再11 小时前
Java之Volatile 关键字全方位解析:从底层原理到最佳实践
java·开发语言·spring boot·struts·kafka·tomcat·maven
daad77711 小时前
rcu 内核线程
java·开发语言
xzjiang_36511 小时前
检查是否安装了MinGW 编译器
开发语言·qt·visual studio code
百锦再12 小时前
Java JUC并发编程全面解析:从原理到实战
java·开发语言·spring boot·struts·kafka·tomcat·maven