打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Go 性能优化技巧 5/10

闭包(closure)也是很常见的编码模式,因它隐式携带上下文环境变量,因此可让算法代码变得更加简洁。

但任何 “便利” 和 “优雅” 的背后,往往都是更复杂的实现机制,无非是语法糖或编译器隐藏了相关细节。最终,这些都会变成额外成本在运行期由 CPU、runtime 负担。甚至因不合理使用,造成性能问题。

用几个代码片段看看可能的麻烦。


单次调用的性能差异有点大(不同环境结果会不同),但这会不会和匿名函数本身构建有关?


似乎是这样。可接下来的问题就更麻烦了。(代码仅作演示,并未保证逻辑一致)

首先,闭包引用原环境变量,导致 y 逃逸到堆上,这必然增加了 GC 扫描和回收对象的数量。

接下来,同样是因为闭包引用原对象,造成数据竞争(data race)。

可见,闭包未必总能将事情 “简单化”。在学习 Go 底层实现过程中,你会了解到,所有 “简单” 都是由编译器或运行时用一堆复杂过程堆出来的。

最新动态,请扫码关注

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
大神为你分析 Go、Java、C 等主流编程语言
python和Go性能相差200倍?实在忍不住吐槽某乎的一些大佬,没去仔细分析过什么文章都好意思发!
Timehop为什么使用Go替代Rails
Python 中的神器!你会几个?你用了几个?
谷歌发布编程语言:Go 1.21.4
区块链编程指南:常用的五大区块链编程语言
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服