Go CPU profiler 内幕 (colobu.com)

【简介】

Go 是那种自带 profiler (分析器)的语言之一。它的运行时包含强大的自成一派的各种 profiler。其它语言,比如 Ruby、Python 和 Node.js, 它们也包含 profiler或者一些用来编写profiler的API,但是与Go的开箱即用的 profiler相比,它们提供的profiler功能有限。如果你想多了解Go提供的这些可观察工具的情况,我强烈推荐你阅读 Felix Geisendörfer的 The Busy Developer’s Guide to Go Profiling, Tracing and Observability。

作为一个好奇的工程师,我喜欢挖掘事物在底层上的工作方式,我一直想去学习Go CPU profiler底层·是怎么工作的。这篇文章就是此次探索的结果。每当我阅读Go运行时代码时,我总是学到到一些新东西,这次也不例外。

点击查看全文 >>

@技术头条 2022-12-18 20:08分享 / 原作者微博:@colobu / 0个评论
赞过的人: @IT技术博客大学习
要不要再学学下面的文章?
零拷贝技术第二篇:Go语言中的应用 (colobu.com)
书接上回:零拷贝技术第一篇:综述, 我们留了一个小尾巴,还没有介绍Go语言中零拷贝技术的应用,那么本文将带你了解Go标准库中零拷贝技术。
by @技术头条 2022-12-18 20:43 分享 查看详情
多年老司机,面对这些Go并发问题,也迟疑了 (colobu.com)
Go一向以它的简单易学而著称,我也遇到过同学说只需半天就能掌握Go语言了,两三年的Go开发经验就称专家了。

想比较Rust等编程语言,Go语言的确容易上手,查看Go语言的规范你也会看到,它的语言规范相比较其它编程语言非常的简短,的确可以一个小时就可以读完。但是如果你深入了解这门语言(其它语言也是类似情况),就会发现很多细节的地方,需要花谢心思和时间仔细琢磨琢磨。这不,我先来几道Go并发的源代码考考你,看看你能回答上来不?
by @技术头条 2022-12-18 20:08 分享 查看详情
与日俱进,在 Go 1.20 中这种高效转换的方式又变了 (colobu.com)
在 Go 1.19 的开发中, string.SliceHeader和string.StringHeader经历了一个生死存亡的争斗,这两个类型一度被标记为弃用(deprecated),但是这两个类型经常用在 slice of byte 和 string 高效互转的场景中,如果被标记为弃用,但是目前还没有可替代的方法,所以这两个类型又把弃用标记去掉了,如无意外,它们也会在 Go 1.20 再次被标记为弃用。
by @技术头条 2022-09-12 22:38 分享 查看详情
啊哈,一道有趣的Go并发题 (colobu.com)
今天一位同学给我出了一道并发题,作为在极客时间开了《GO并发编程实战课》的作者,居然一时间没有回答上来,惭愧啊,所以晚上专门研究了一下题目,给出几个实现方案供探讨。
by @技术头条 2022-09-03 23:26 分享 查看详情
Go并发编程一年回顾 (colobu.com)
距离我2019年的深入Go并发编程研讨课发布也有一年时间了。在Gopher Beijing 2019相关演讲后我整理了这一个8小时的课程,对有志于深入理解Go并发编程原理的同学从深度和广度上提供一些帮助。当然一年来我也一直关注着Go并发编程的演变,并且补充了池和并发模式的一些例子。对于官方的并发库来说,这一年来又有哪些变化呢,让我们快速回顾一下。
by @技术头条 2022-08-19 00:06 分享 查看详情
使用 Docker 搭建属于你自己的 Go Playground (soulteary.com)
本篇文章将介绍如何通过容器来部署属于你自己的 Go Playground。Go Playground 是 Golang 团队推出的在线语言工具,不论是对于初学者而言,还是对 Golang 开发者来说,它都不失为一个简单好用的神器。但由于种种原因,国内部分用户使用这个功能可能会遇到一些网络问题,而无法使用这个服务;以及出于运行代码包含一些“隐私”,而无奈放弃这个服务。
by @技术头条 2022-08-18 23:45 分享 查看详情
Go 垃圾回收器指南 (colobu.com)
本指南旨在帮助高级Go语言用户更好地了解Go语言垃圾回收器的使用成本。 它还提供了Go用户如何利用这些知识来提高应用程序的资源利用率的指导。 它并不假设你了解垃圾回收,但假设你熟悉Go语言。
by @技术头条 2022-08-18 23:21 分享 查看详情
Go: logrus性能提升 (wklken.me)
在Go项目中,logrus是一个相对完备的第三方日志库,用起来非常顺手, 特别是WithField/WithFields/WithError。我们开发一些对性能要求非常高的应用,例如API网关/权限服务等,需要记录流水日志,此时日志库的性能直接会影响整体接口性能,所以针对性地做了一些优化。
by @技术头条 2022-07-24 21:03 分享 查看详情
四舍五入在Go语言中为何如此困难 (mp.weixin.qq.com)
在 Go 语言中这似乎成为了难题,在 stackoverflow 上搜索 [go] Round 会存在大量相关提问,Go 1.10 开始才出现 math.Round 的身影,本以为 Round 的疑问就此结束,但是一看函数注释 Round returns the nearest integer, rounding half away from zero ,这是并不常用的 Round half away from zero 实现呀,说白了就是我们理解的 Round 阉割版,精度为 0 的 Round half up 实现,Round half away from zero 的存在是为了提供一种高效的通过二进制方法得结果,可以作为 Round 精度为 0 时的高效实现分支。
by @code小生 2022-07-24 11:01 分享 查看详情
CPU是如何进行分支预测的? (mp.weixin.qq.com)
历史上CPU分支预测算法演进过程、实现细节、tradeoff和对应论文介绍。
by @张雅宸_zyc 2022-07-13 14:31 分享 查看详情