🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
- 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
- 2023年2月8日 Go生态洞察:Profile-Guided Optimization预览
- 🐾 Go编译器优化的演进
- 🐾 使用Profiling指导优化
- 🐾 实战演练:Markdown到HTML的服务
- 🐾 环境搭建
- 🐾 构建并运行服务器
- 🐾 发送Markdown样例
- 🐾 Profiling过程
- 🐾 收集Profile
- 🐾 使用Profile进行优化
- 🐾 性能评估
- 🐾 运行基准测试
- 🐾 结果比较
- 🐾 总结
- 🐾 下一篇预告
- 原创声明
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
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
的代码。
// 代码示例
🐾 构建并运行服务器
接下来,我们构建并运行服务,使用Go提供的命令。
$ go build -o markdown.nopgo.exe
$ ./markdown.nopgo.exe
🐾 发送Markdown样例
我们还需要从另一个终端发送一些Markdown样例。
$ curl -o README.md ...
🐾 Profiling过程
现在我们有了一个运行中的服务,我们可以收集profile,并使用PGO重建,看看性能是否有所提升。
🐾 收集Profile
我们在main.go
中导入了net/http/pprof
,并通过以下步骤收集CPU profile。
$ curl -o cpu.pprof ...
🐾 使用Profile进行优化
我们使用-pgo
标志来构建PGO。
$ go build -pgo=auto -o markdown.withpgo.exe
🐾 性能评估
接下来,我们使用Go的benchmark工具来评估PGO对性能的影响。
🐾 运行基准测试
我们分别对没有使用PGO和使用了PGO的服务器进行了基准测试。
$ go test ...
🐾 结果比较
最后,我们使用benchstat
来比较两种情况下的性能。
$ benchstat nopgo.txt withpgo.txt
PGO的使用在Go 1.20中通常可以在CPU使用方面带来2%到4%的改进。
🐾 总结
通过PGO,我们可以使Go的应用程序性能得到进一步的提升。虽然目前PGO还在预览阶段,但它已经展现
出巨大的潜力。不要忘了,这篇文章已被猫头虎的Go生态洞察专栏收录,详情点击这里。
🐾 参考资料
- Profile-Guided Optimization user guide
- Profiling in Go
- Go 1.20 release notes
🐾 下一篇预告
在下一篇文章中,我将探讨Go语言中的“All your comparable types”话题。敬请期待,我们将一起深入了解Go中类型比较的新领域!
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。