Go1.0 到 1.22 的性能表现,提高了多少倍?

2024年 5月 11日 70.4k 0

大家好,我是煎鱼。

五一假期时看到 @Ben Hoyt 大佬分享的文章《Go performance from version 1.0 to 1.22》,分享了他在这么多年来一直坚持不懈的对 Go 进行性能测试的记载。

今天基于此分享给大家,有所调整和精简。

原作者对 Go1.0 到 Go1.22 的所有 Go 版本进行了性能测试,包含了在 Go 1.20 中新增的性能分析引导优化(PGO)的结果。

Go 测试项目用的是 GoAWK[1] 项目,该项目用 Go 写的 AWK 解释器,支持 CSV。

GoAWK 使用案例如下:

$ go install github.com/benhoyt/goawk@latest

$ goawk 'BEGIN { print "foo", 42 }'
foo 42

$ echo 1 2 3 | goawk '{ print $1 + $3 }'
4

# Or use GoAWK's CSV and @"named-field" support:
$ echo -e 'name,amount\nBob,17.50\nJill,20\n"Boba Fett",100.00' | \
  goawk -i csv -H '{ total += @"amount" } END { print total }'
137.5

性能测试

接下来正式开始进行性能测试,主要是同项目多版本测试的模式。

原作者(下称:我)通过在两个 AWK 程序上运行 GoAWK 来测试这一点,这两个程序代表了使用 AWK 可以做的极端不同情况:I/O 操作与字符串处理,以及数值计算。

countwords(字符串处理任务)

首先是 countwords,这是一个字符串处理任务,它计算输入中单词的频率并打印出带有计数的单词。这是 AWK 脚本的典型应用。

程序输入是某本书的 10 倍串联版本的内容。

以下是部分代码:

{
for (i=1; i

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论