【译文】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%。
➡️