前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

作者头像
猫头虎
发布2024-04-08 15:10:28
730
发布2024-04-08 15:10:28
举报

2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

🐯 摘要 嗨,猫头虎博主在此!今天我们将深入探讨2023年2月8日发布的Go语言新特性:Profile-Guided Optimization (PGO)。如果你对Go的性能优化感兴趣,那么本文将是你的不二之选。准备好了吗?让我们一起探索Go的这一新领域吧!

🐯 引言 在Go语言的世界里,每次编译都是一个提升性能的机会。从常量传播到逃逸分析,Go编译器不断地进行优化。随着Go 1.20的发布,我们迎来了PGO的初步支持,一个崭新的性能优化领域。


🐾 Go编译器优化的演进

Go的编译器优化从版本到版本都在改进,但这并非易事。一些优化是可调的,但编译器不能仅仅“全力以赴”地优化每一个函数,因为过度的优化可能会损害性能或导致构建时间过长。而且,编译器在进行函数内部“常见”与“不常见”路径的判断时,必须基于静态启发式做出最佳猜测。

🐾 使用Profiling指导优化

Go 1.20引入了PGO作为预览功能。通过profiling,我们可以为编译器提供在生产环境中代码的使用情况,从而使编译器能够做出更加明智的决策。


🐾 实战演练:Markdown到HTML的服务

🐾 环境搭建

首先,我们来建立一个将Markdown转换为HTML的服务。这里是基本的设置步骤和main.go的代码。

代码语言:javascript
复制
// 代码示例
🐾 构建并运行服务器

接下来,我们构建并运行服务,使用Go提供的命令。

代码语言:javascript
复制
$ go build -o markdown.nopgo.exe
$ ./markdown.nopgo.exe
🐾 发送Markdown样例

我们还需要从另一个终端发送一些Markdown样例。

代码语言:javascript
复制
$ curl -o README.md ...

🐾 Profiling过程

现在我们有了一个运行中的服务,我们可以收集profile,并使用PGO重建,看看性能是否有所提升。

🐾 收集Profile

我们在main.go中导入了net/http/pprof,并通过以下步骤收集CPU profile。

代码语言:javascript
复制
$ curl -o cpu.pprof ...
🐾 使用Profile进行优化

我们使用-pgo标志来构建PGO。

代码语言:javascript
复制
$ go build -pgo=auto -o markdown.withpgo.exe

🐾 性能评估

接下来,我们使用Go的benchmark工具来评估PGO对性能的影响。

🐾 运行基准测试

我们分别对没有使用PGO和使用了PGO的服务器进行了基准测试。

代码语言:javascript
复制
$ go test ...
🐾 结果比较

最后,我们使用benchstat来比较两种情况下的性能。

代码语言:javascript
复制
$ benchstat nopgo.txt withpgo.txt

PGO的使用在Go 1.20中通常可以在CPU使用方面带来2%到4%的改进。


🐾 总结

通过PGO,我们可以使Go的应用程序性能得到进一步的提升。虽然目前PGO还在预览阶段,但它已经展现

出巨大的潜力。不要忘了,这篇文章已被猫头虎的Go生态洞察专栏收录,详情点击这里

🐾 参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2023年2月8日 Go生态洞察:Profile-Guided Optimization预览
    • 🐾 Go编译器优化的演进
      • 🐾 使用Profiling指导优化
    • 🐾 实战演练:Markdown到HTML的服务
      • 🐾 环境搭建
      • 🐾 构建并运行服务器
      • 🐾 发送Markdown样例
    • 🐾 Profiling过程
      • 🐾 收集Profile
      • 🐾 使用Profile进行优化
    • 🐾 性能评估
      • 🐾 运行基准测试
      • 🐾 结果比较
    • 🐾 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档