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


🌷🍁 博主猫头虎(🐅🐾)带您 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生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化的 MCM-GPU 比具有相同 SM 总数和 DRAM 带宽的同等配备的多 GPU 系统快 26.8%。

MCM-GPU: Multi-chip-module GPUs for Continued Performance Scalability 抽象: 从历史上看,基于 GPU 的高性能计算的改进与晶体管缩放紧密相连。随着摩尔定律的减慢,每个芯片的晶体管数量不再以历史速度增长,单个单片GPU的性能…

易点易动设备管理系统--提升设备能耗管理效率的工具

在当今的节能环保意识日益增强的社会背景下,设备能耗管理成为了市场推广人员关注的焦点之一。为了帮助市场推广人员提升设备能耗管理效率,易点易动设备管理系统应运而生。本文将详细介绍易点易动设备管理系统的功能和优势,以及如何借助该系统…

Python-元组详解

注意:列表是方括号【】,元组是圆括号(),这里要分清。 创建元组 1、a () 2、b tuple() a () b tuple() 2、可以指定初始值 a (1,2,3,4) a (1,2,3,4) 3、元素可以是任意类型 a (1,2,3,4,hello) a (1,2,3,4…

2023年12月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

免费,开源的充电站(充电桩)软件技术栈

关于 PIONIX: PIONIX 成立于 2021 年,总部位于德国巴特申博恩,已迅速成为该领域的推动者。PIONIX 牵头开发了 Linux 基金会能源项目 EVERest——一个尖端、免费、开源的充电站软件堆栈。值得注意的是,OCPP 是该计划的重要组成部分…

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。…

简单桶排序

#include<stdio.h> int main() { int a[11], i, j, t; for (i 0;i < 10;i) a[i] 0;//初始化为零 for (int i 1;i < 5;i)//循环输入5个数&#xff1b; { scanf("%d", &t);//把每一数读取到变量t中 a[t];/…

edge 浏览器妙用你好

1 文字无法复制 在网络地址前加 read: 【即将失效】16个Edge隐藏绝技&#xff0c;你未必全知道&#xff01;&#xff01;&#xff01;_哔哩哔哩_bilibili

阿里云上传文件出现的问题解决(跨域设置)

跨域设置引起的问题 起因&#xff1a;开通对象存储服务后&#xff0c;上传文件限制在5M 大小&#xff0c;无法上传大文件。 1.查看报错信息 2.分析阿里云服务端响应内容 <?xml version"1.0" encoding"UTF-8"?> <Error><Code>Invali…

Excel VBA应用技巧

文章目录 第一章 Range &#xff08;单元格&#xff09;对象1. 单元格的引用方法1.1 使用Range 属性1.2 使用Cells 属性1.3 使用快捷记号1.4 使用Offset 属性1.5 使用Resizae 属性1.6 使用Union 方法1.7 使用UsedRange 属性1.8 使用CurrentRegion 属性 2. 选定单元格区域的方法…

NX二次开发自制UI界面大小设置

1、进入NX&#xff0c;点击“应用模块->更多->块UI样式编辑器”&#xff0c;进入UI编辑界面&#xff1b; 2、设置“Dialog->其他->DialogSizing”为Allow Resize 3、添加滚动窗口控件&#xff0c;设置Width、Height的值即可改变UI界面大小&#xff0c;注意&#x…

异常捕获后,如果事务回滚了,后面对数据库的操作需要加事务,不然对数据库的修改不会生效

异常捕获后&#xff0c;如果事务回滚了&#xff0c;后面对数据库的操作需要加事务&#xff0c;不然对数据库的修改不会生效

service层报错:Invalid bound statement (not found)

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

2023中医药国际传承传播大会暨中医药图片和非遗艺术展隆重揭幕

由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会联合主办的“2023中医药国际传承传播大会”3日在广东省深圳市举办&#xff0c;“中医药国际传承传播图片展”与“非遗艺术展”在大会举办期间开展迎客。会议聚焦非遗健康、非遗传承等…

序列构成的数组

容器序列   list、tuple 和 collections.deque 这些序列能存放不同类型的数据。 扁平序列   str、bytes、bytearray、memoryview 和 array.array&#xff0c;这类序列只能容纳一种类型。 容器序列存放的是它们所包含的任意类型的对象的引用&#xff0c;而扁平序列里存放的…

MySQL生成UUID并去除-

uuid()函数 uuid() 函数可以使mysql生成uuid,但是uuid中存在-,如下图&#xff1a; 去除uuid的- 默认生成的uuid含有-&#xff0c;我们可以使用replace函数替换掉-&#xff0c;SQL如下 select replace(uuid(),"-","") as uuid;Insert语句中使用UUID 如果…

JAVA全栈开发 day18MySql03

一、复习 为什么要用数据库数据库好处数据库的发展史​ 层次模型​ 网状模型​ 关系模型&#xff08;二维表专门存储数据&#xff0c; 表与表的关联&#xff09;​ 表与表的关系&#xff1a; 1对1 &#xff0c;1对多&#xff0c;多对多​ 非关系模型关系模…

机器学习之萤火虫算法(Firefly Algorithm,FA)

萤火虫算法(Firefly Algorithm,FA)是一种启发式优化算法,灵感来自萤火虫的交配行为。该算法最初由Xin-She Yang于2008年提出,用于解决优化问题。它模拟了萤火虫通过发光来吸引其他萤火虫并进行交配的行为,将这一过程应用于寻找最优解。 以下是萤火虫算法的基本思想和步骤…

【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)

本实例为专栏系统文章:创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具界面及参数如下所示: 核心…

什么是高防IP,高防IP该如何选择。

高防IP&#xff0c;指的是高防御能力的IP地址。在互联网的世界里&#xff0c;网络安全问题成为一个重要的话题。作为一个用户&#xff0c;你是否曾遇到过被黑客攻击造成的网站瘫痪、信息泄露等问题&#xff1f;如果你是一个企业&#xff0c;你是否考虑过自己公司的网站和业务的…