为什么80%的码农都做不了架构师?>>>   

延迟调用(defer)确实是一种 “优雅” 机制。可简化代码,并确保即便发生 panic 依然会被执行。如将 panic/recover 比作 try/except,那么 defer 似乎可看做 finally。

如同异常保护被滥用一样,defer 被无限制使用的例子比比皆是。

只需稍稍了解 defer 实现机制,就不难理解会有这样的性能差异。

编译器通过 runtime.deferproc “注册” 延迟调用,除目标函数地址外,还会复制相关参数(包括 receiver)。在函数返回前,执行 runtime.deferreturn 提取相关信息执行延迟调用。这其中的代价自然不是普通函数调用一条 CALL 指令所能比拟的。

或许你会觉得 4x 的性能差异算不得什么,但如果是下面这样呢?

当多个 goroutine 执行该函数时,只怕性能差异就不是 4x,还得算上 httpGet 所需时间。原本的并发设计,因为错误的 defer 调用变成 “串行”。

与之类似的,还有下面这样的写法。

如果 files 是个 “超大” 列表,只怕在 analysis 结束前,会有不小的隐式 “资源泄露”,这些不能及时回收的对象,会导致 GC 在内的相关性能问题。

解决方法么,要么去掉 f.close 前的 defer,要么将内层处理逻辑重构为独立函数(比如匿名函数调用)。

除此之外,单个函数里过多的 defer 调用可尝试合并。最起码,在并发竞争激烈时,mutex.Unlock 不应该使用 defer,而应尽快执行,仅保护最短的代码片段。

最新动态,请扫码关注

转载于:https://my.oschina.net/qyuhen/blog/667741

Go 性能优化技巧 4/10相关推荐

  1. Go 性能优化技巧 8/10

    为什么80%的码农都做不了架构师?>>>    尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足.只是某些时候,我们须对此做些变通,以提升性 ...

  2. Go 性能优化技巧 8/10 1

    尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足.只是某些时候,我们须对此做些变通,以提升性能. 为便于阅读,以下示例均做了最大程度精简. 如果是 refle ...

  3. Go 性能优化技巧 7/10

    为什么80%的码农都做不了架构师?>>>    接口的用途无需多言.但这并不意味着可在任何场合使用接口,要知道通过接口调用和普通调用存在很大差别.首先,相比静态绑定,动态绑定性能要差 ...

  4. SQL性能优化技巧,常见优化10经验,数据库查询好慢,还能怎么办

    我熟练应用ctrl c和ctrl v 开发curd代码好多年了. mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那 ...

  5. Java性能优化技巧

    Java性能优化技巧 参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序 ...

  6. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...

  7. mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧

    本文实例讲述了php导入大量数据到mysql性能优化技巧.分享给大家供大家参考.具体分析如下: 在mysql中我们结合php把一些文件导入到mysql中,这里就来分享一下我对15000条记录进行导入时 ...

  8. python linux 优化_Python 代码性能优化技巧

    Python 性能优化除了改进算法,选用合适的数据结构之外,还有几种关键的技术,比如将关键 python 代码部分重写成 C 扩展模块,或者选用在性能上更为优化的解释器等,这些在本文中统称为优化工具. ...

  9. java性能瓶颈分析_Java性能优化技巧整理,做一个深度的程序员

    原标题:Java性能优化技巧整理,做一个深度的程序员 在我们身边是一大批的程序员,层次不一,但是放眼观,我们很容易就可以看到那些是业务型程序员,那些是有层次的程序员.注重细节,注重性能,做一个有深度的 ...

  10. python代码性能优化技巧

    python代码性能优化技巧 代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Pyth ...

最新文章

  1. 【百度地图API】如何区分地址解析和智能搜索?
  2. hash表建立 很久没写数据结构了
  3. 计算机网络基础 — 基本术语/概念
  4. WIN7无法记住远程登录密码
  5. tp论坛 分页(三)
  6. Fedora20配置tftp服务器
  7. 阿里巴巴对Java编程【单元测试】的规约
  8. svn in xcode5
  9. Hi3515主板UBoot参数备份
  10. HyperLedger/Fabric JAVA-SDK with 1.1
  11. 教你快速运行谷歌EfficientDet目标检测
  12. 三维计算机视觉(七)--Spin image
  13. Windows版 Oracle安装
  14. Virtualbox安装Windows7虚拟机
  15. 三菱plc指令dediv_三菱plc指令tcmp的用法
  16. CAN报错BUSLIGHT,BUSHEVAY,BUSOFF什么意思
  17. linux统计文件大小大于100k,Centos / Linux设置logrotate为所有日志的最大文件大小
  18. 2022爬取微博评论-极简40行代码
  19. Cannot find ./catalina.sh The file is absent or does not hav
  20. C fread()函数

热门文章

  1. JDBC 连接 SQL2005 解决办法
  2. 关于阿里巴巴发布普惠体的一些思考
  3. List集合去除重复对象及equals()、hashCode()方法的作用
  4. 2017.10.26-构建之法:现代软件工程-阅读笔记
  5. Java设计模式应用——工厂模式
  6. 网站设计中面包屑导航条的使用和设计
  7. synchronized关键字的4种用法
  8. jvm内存分析和cpu耗时分析
  9. Spring(十六)之MVC框架
  10. 1.3 - 字典练习题