Week37 -我当时害怕极了,原来Golang用指标是母汤的 [Server的终局之战系列]

大家好,在这个週末我参加了Golang-Conference-2020,每个议程养分都很高,而在最后一个议程Deep Dive into The Escape Analysis in Go刷新我的三观。

为什么传递指标母汤

先说结论:

在 Golang 中,传递指标因为要做Escape Analysis导致效能消耗,所以比传递值还要慢

在 C/C++的世界中,我们需要自行控管记忆体,放在 stack 或 heap 我们须控管他们的释放,但由于 Golang 有 GC(Garbage Collection),所以 Golang 本身会帮我们控管记忆体的释放,

而这个变数到底要放在 stack 或 heap 就要透过Escape Analysis来分析,如果变数以指标的方式传递给函数,Escape Analysis在分析的时间往往多过传递值的时间,所以在 Golang 中传递指标反而是没有效能优点的。

所以真的只有缺点吗?

也不然,在when-to-use-pointers-in-go提到,如果複製的是非常大的变数,那传递指标是有机会比传递值还快的,毕竟传递值就是複製一个值到函数中,但这个非常大的变数到底多大并没有正确答案,大家还是要用 benchmark 来测试才会知道。


在 Golang 中,我曾经为了效能一直使用指标,而指标导致没办法像 FP 一样有稳定的 output 一直让我头疼,但后来发现原来根本没有提升效能真的是让我大大上了一刻,真的是没搞清楚做了一堆白工呢 XD。

参考

Deep Dive into The Escape Analysis in Gowhen-to-use-pointers-in-gogo-escape-analysis

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章