写了多年软件,我在软件性能上学到的4点教训
极客时间编辑部
讲述:丁婵大小:8.00M时长:05:50
你好,欢迎收听极客视点。
在软件开发人员尼尔森·埃尔哈格(Nelson Elhage)的职业生涯中,他至少参加了三个对软件性能表现有一定要求的项目,它们分别是 Livegrep 、 Taktician 和 Sorbet 。此外,他还对正使用的工具做了许多提升性能的工作。因此,他将软件性能方面的经验总结成 4 点分享给你,希望对你有所帮助。以下是 InfoQ 的翻译内容。
一、性能是软件的一个重要特性
我很赞同这样一个观点,即软件性能不是独立于软件功能或软件特性集合的一个属性。性能(尤其是指能显著提升速度的性能)本身就是软件的一项功能,它从根本上改变了一个软件工具的使用和感知方式。
我认为性能的价值在普遍意义上非常容易理解,许多工程师都知道并经常讨论响应时间感知阈值或延迟对转换率的影响,但能真正理解性能内在含义的人实际上很少,大部分只是纸上谈兵。最近感觉抱怨软件运行速度缓慢的人很多,但是也很少有团队可以为此做些什么,以至于工具的性能变得越来越慢。
从业经验告诉我,尽管我们的工具让编写高性能软件变得越来越难,但产出高性能软件不是没有可能,而且这一努力是值得的。
二、性能改变了用户使用软件的方式
毋庸置疑,用户更偏爱性能好、速度快的应用软件,因为与速度慢的软件相比,这会带来更好的用户体验。
高性能软件改变了用户使用软件的方式 ,这一点也许体现得不是很明显。但用户通常会使用多种策略来实现目标任务,并且他们将会越来越频繁地选择使用更快的工具。性能更好的工具不仅可以帮助用户更快地完成任务,而且还能让用户以全新方式完成各种类型的任务。
三、性能需要贯穿项目整个生命周期
在项目的整个生命周期中,追求性能需要付出一定的努力。如今,不用担心性能问题这个观点越来越流行,尤其是在项目初期。
一种普遍流行的哲学观点似乎是,首先应该以最快的方式编写出应用程序,只有在程序正常工作后,再转向利用分析器并开始逐个优化热点代码,甚至最后可能将某个组件使用更快的编程语言或技术进行重构。
这确实是一个不错的并被普遍默认接受的建议,但是,认识到这些观点的局限性,并在项目开始时能够寻求其他的实现形式确实很重要。特别是,我开始相信“功能优先,性能让步”模型很少会产出真正高性能的软件。我总结了上面的方法论无效的两个主要原因:
1. 软件架构会直接影响性能
系统的基本架构(高级结构、数据流和组织形式)通常会对性能产生长远影响。提前进行架构设计,后续的维护成本会降低,否则,后期如有修改,成本陡增。
2. 优化性能不能只关注热点代码
像大多数编译器和类型检查器一样,Sorbet 也没有什么热点代码。CPU 时间在软件代码的不同功能部分被相对均匀地分配和执行。这种均匀分散执行从根本上意味着,不可能对一个检查器通过优化热点代码的形式来提升性能,因为几乎没有热点代码可以进一步优化。
相反,例如缓存优化的数据结构或用 C ++ 重构实现关键模块,实质上会使类型检查器中的每一行代码都执行得更快,从而使整个应用的性能得到提升。性能优化随着微小性能改进的累积可以逐步放大。
四、从性能的基础出发能简化架构
相对于从指定的功能级别开始优化,从内核开始高性能设计可以最终极大地简化软件项目的体系架构。
在我们编写 Sorbet 之前,进行了一些内部 Ruby 代码的静态分析,该分析是 Sorbet 整体分析(全局常量解析)有限的一小部分。这些代码分析由 Ruby 实现,构建在 Parser gem 之上,性能比 Sorbet 明显慢得多,并且由于 Ruby 的 GVL 限制,使得并行化非常有很大的挑战性。为解决并行化问题,我们最终使用基于 fork 的并行化构建了一个日趋复杂的缓存解决方案,只是为了保持运行时间在可接受的范围内。由于大大提高基准性能以及简化了系统内部并行性,Sorbet 能够完胜那些没有使用缓存策略的系统。
有一个普遍的现象是:尝试为速度较慢的系统提升性能通常会增加系统复杂性,还可能引入新类型的 Bug,还会增加额外的开销成本,系统性能会下降甚至更糟,从而使问题进一步加剧。
如果从一开始软件性能就够快,可能根本不需要这些附加中间层就可获得可接受的总体性能,而且相同的性能水平下,软件系统架构也会简单很多。
以上就是尼尔森·埃尔哈格关于软件性能的四点经验,你可以点解原文链接了解完整内容。
此外,在极客时间专栏《性能工程高手课》中也有性能优化的经验分享以及系统化的方法,可以帮助你系统地、有条理地根据信息进行性能问题诊断,最终获得解决问题的能力。以下是这个专栏的目录,供你参考。使用极客视点专属口令,还可以享受立减优惠。
优惠口令:gaoshou99
适用专栏:《性能工程高手课》
适用规则:立减 10 元(满 40 元可用)
有效期:8 月 25 日 -9 月 1 日
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论