Go 性能优化技巧 5/10
来源:互联网 发布:java socket通信 编辑:程序博客网 时间:2024/05/04 08:33
闭包(closure)也是很常见的编码模式,因它隐式携带上下文环境变量,因此可让算法代码变得更加简洁。
但任何 “便利” 和 “优雅” 的背后,往往都是更复杂的实现机制,无非是语法糖或编译器隐藏了相关细节。最终,这些都会变成额外成本在运行期由 CPU、runtime 负担。甚至因不合理使用,造成性能问题。
用几个代码片段看看可能的麻烦。
单次调用的性能差异有点大(不同环境结果会不同),但这会不会和匿名函数本身构建有关?
似乎是这样。可接下来的问题就更麻烦了。(代码仅作演示,并未保证逻辑一致)
首先,闭包引用原环境变量,导致 y 逃逸到堆上,这必然增加了 GC 扫描和回收对象的数量。
接下来,同样是因为闭包引用原对象,造成数据竞争(data race)。
可见,闭包未必总能将事情 “简单化”。在学习 Go 底层实现过程中,你会了解到,所有 “简单” 都是由编译器或运行时用一堆复杂过程堆出来的。
最新动态,请扫码关注
0 0
- Go 性能优化技巧 5/10
- Go 性能优化技巧 10/10
- Go性能优化技巧 1/10
- Go 性能优化技巧 2/10
- Go 性能优化技巧 3/10
- Go 性能优化技巧 4/10
- Go 性能优化技巧 6/10
- Go 性能优化技巧 7/10
- Go 性能优化技巧 8/10
- Go 性能优化技巧 9/10
- 【golang】Go 性能优化技巧
- Go高性能编程技巧
- Go高性能编程技巧
- Java 性能优化技巧集锦 (5)
- Java 性能优化技巧集锦 (5)
- Java性能优化的5个技巧
- Apache性能优化技巧
- Apache性能优化技巧
- 70.[Leetcode]Climbing Stairs
- [贪心] BZOJ 2811 [Apio2012]Guard
- Android步进电机
- 事件驱动模型
- StringBuilder与StringBuffer的区别
- Go 性能优化技巧 5/10
- 显式游标和隐式游标的区别
- 安卓tabhost和子Activity通信方法
- Spingmvc中数据校验和异常处理详解
- 获取手机相关信息
- input type="file" 上传文件,若是flv格式,则截取保存一张图片asp.net
- 怎么解决Failed to load the JNIshared library
- 为什么有些人觉得项目经理类似于打杂的?怎么解释这种现象?
- XMG xib中不属于一个类的控件,拖线到指定的类中