【译文】Go语言性能从 1.0 版到 1.22 版

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

本文重新运行了GoAWK解释器在Go 1.0至1.22版本上的基准测试,并添加了缺失的版本和新版本。比较了GoAWK在不同版本编译时的性能,包括字符串处理和数字计算。结果显示,Go 1.3、1.5、1.7和1.12版本有最大的改进。在Go 1.2中,数词的速度出现了奇怪的提升,然后又下降。通过剖析找出了1.2版本异常的原因。在使用Go 1.22的情况下,PGO只提高了几个百分点的性能。总的来说,countwords现在的速度是Go 1.0的8倍,sumloop是它的24倍。

🎯

关键要点

  • 本文重新运行了GoAWK解释器在Go 1.0至1.22版本上的基准测试。
  • 比较了GoAWK在不同版本编译时的性能,包括字符串处理和数字计算。
  • Go 1.3、1.5、1.7和1.12版本有最大的性能改进。
  • Go 1.2中数词的速度出现了奇怪的提升,然后又下降,原因是堆栈热分割问题。
  • 通过剖析找出了1.2版本异常的原因,运行时堆栈操作占了运行时间的很大比例。
  • 在使用Go 1.22的情况下,PGO只提高了几个百分点的性能。
  • countwords现在的速度是Go 1.0的8倍,sumloop是它的24倍。

延伸问答

Go语言的性能在不同版本之间有何变化?

Go 1.3、1.5、1.7和1.12版本的性能改进最大,countwords的速度是Go 1.0的8倍,sumloop是24倍。

Go 1.2版本的性能异常是如何产生的?

Go 1.2版本的性能异常是由于堆栈热分割问题造成的,运行时堆栈操作占用了较大比例的运行时间。

PGO在Go 1.22版本中的性能提升效果如何?

在Go 1.22中,PGO仅提高了几个百分点的性能,对countwords约为2%,对sumloop约为7%。

GoAWK的基准测试是如何进行的?

基准测试使用了两个AWK程序,分别测试字符串处理和数字计算的性能。

Go语言在性能优化方面做了哪些改进?

Go团队和外部贡献者改进了编译器,优化了运行时、垃圾回收器和标准库。

Go 1.0和1.22版本的二进制文件大小变化如何?

多年来,二进制文件的大小保持稳定,1.2版本出现较大增长,启用PGO后仅增大5%。

➡️

继续阅读