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 运行时的作用。通过使用四叉堆(4-ary heap)替代二叉堆,优化了定时器性能,特别是在高并发场景中。

适合人群:Go 语言开发者及对运行时机制、高性能定时器实现感兴趣的工程师。
by @技术头条 2025-01-20 00:03 查看详情
Go中秘而不宣的数据结构: 四叉堆,不是普通的二叉堆 (colobu.com)
文章介绍了 Go 语言中定时器使用的四叉堆数据结构,分析其相较于二叉堆的优势,如降低堆高度以提升性能,并回顾了 Go 不同版本中定时器实现的演进过程。适合对 Go 语言运行时实现细节、数据结构优化及并发编程感兴趣的开发者阅读。
by @技术头条 2025-01-12 12:03 查看详情
如何使用JS获取系统内存、CPU/GPU、电量等信息 (www.zhangxinxu.com)
这篇文章讲解了如何通过 JavaScript 获取设备的内存、CPU、GPU 和电池等硬件信息,详细介绍了可用的 API、兼容性及实践场景。通过代码示例和性能分析,展示了如何在前端优化中合理利用这些数据。内容适合从事前端开发的工程师以及关注性能优化和用户体验提升的技术人员,提供了实用的开发参考。
by @技术头条 2025-01-03 00:13 查看详情
Go中秘而不宣的数据结构 CacheLinePad:精细化优化 (colobu.com)
这篇文章深入解析了 Go 语言中的 CacheLine 数据结构,详细探讨了其在多核环境下的内存对齐、伪共享问题以及性能优化方法。通过具体的代码示例和实验分析,文章展示了如何利用 CacheLine 提升并发程序的性能。内容专业且实用,对开发高性能 Go 应用的工程师有很高的参考价值,值得推荐阅读和分享。
by @技术头条 2025-01-03 00:03 查看详情
Go中秘而不宣的数据结构 Treap:随机化的二叉搜索树 (colobu.com)
这篇文章详细解析了 Go 语言中 Treap 数据结构的实现和应用。内容涵盖了 Treap 的设计思想、核心算法以及在实际场景中的使用案例,还深入探讨了平衡二叉树与堆的结合特点及其性能优势。对于希望了解 Go 内部实现或探索高效数据结构的开发者,这篇文章提供了丰富的干货和学习价值,值得推荐。
by @技术头条 2025-01-03 00:01 查看详情
Go中秘而不宣的数据结构 BitVec, 资源优化方法之位向量 (colobu.com)
如何深入理解 Go 的内部数据结构?文章以 BitVec 为例,详细解析了其设计原理、实现方式以及在不同场景中的应用,还探讨了相关的性能优化策略和工程实践。这是一篇高质量的技术解读,为开发者学习 Go 的底层实现提供了宝贵的参考!
by @技术头条 2025-01-02 23:59 查看详情
CPU篇之软中断 (www.codedump.info)
软中断作为下半部机制的代表,是随着SMP(share memory processor)的出现应运而生的,它也是tasklet实现的基础(tasklet实际上只是在软中断的基础上添加了一定的机制)。软中断一般是“可延迟函数”的总称,有时候也包括了tasklet(请读者在遇到的时候根据上下文推断是否包含tasklet)。它的出现就是因为要满足上面所提出的上半部和下半部的区别,使得对时间不敏感的任务延后执行,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。
by @技术头条 2024-03-21 23:03 查看详情
聊聊 Go 的边界检查消除技术 (colobu.com)
在翻译的从慢速到SIMD一文中, SourceGraph工程师其中的一个优化就是边界检查消除(BCE,bounds check elimination)技术,同时他也抛给了读者一个问题:

为啥在使用 a[i:i+4:i+4] 而不是 a[i:i+4]?

本文第一部分先回答这个问题。 第二部分介绍更好的边界检查消除方法。 第三部分再全面梳理Go的边界检查消除技术。
by @技术头条 2024-03-21 23:00 查看详情
Go 中的高速数据包处理:从 net.Dial 到 AF_XDP (colobu.com)
最近编写了一个Go程序,向数百万个IP地址发送ICMP ping消息。显然,希望这个过程能尽可能快速高效地完成。因此,这促使我研究各种与网络栈交互和快速发送数据包的各种方法。这是一个有趣的旅程,所以在本文中,我将分享一些学习成果,并记录下来供将来参考:)你将看到,仅使用8个内核就可以达到1880万数据包/秒。这里还有一个GitHub仓库,其中包含了示例代码,可以方便地跟随学习。
by @技术头条 2024-03-21 22:55 查看详情
Go运行时的并发原语 (colobu.com)
这篇文章我们来了解一下隐藏在Go运行时中的一些并发原语, 因为运行时是底座和包循环依赖等原因,运行时中很少使用标准库中的并发原语,它有自己的并发原语。
by @技术头条 2024-01-14 19:07 查看详情