JavaScript、Python 比 C++ 慢 8 倍、29 倍?

JavaScript、Python 比 C++ 慢 8 倍、29 倍?
文章图片
整理|苏宓出品|CSDN(ID:CSDNnews)近日 , 来自多伦多大学和YScope公司(为软件系统提供创新的日志管理和故障排除工具 。 由一群计算机工程教授和博士创立)的DavidLion、多伦多大学AdrianChiu和MichaelStumm、多伦多大学和YScope公司DingYuan共同发布了一份《调查托管语言的运行时性能:为什么JavaScript和Python比C++慢了8倍和29倍 , 而Java和Go却能更快》(https://www.usenix.org/system/files/atc22-lion.pdf)的论文分析报告 , 深度剖析了不同编程语言运行时在代码开发中真实的性能情况 , 由此方便开发者可以精确地测量执行任何字节码指令所花费的时间等 。
性能是系统软件不得不面对的挑战
在报告中 , 研究人员指出 , 自2015年以来 , 具有集成运行时环境的编程语言越来越受欢迎 , 其中 , 全球知名的代码托管平台GitHub上最受欢迎的三种语言分别是JavaScript、Java和Python 。
作为开发利器 , 编程语言帮助开发者快速构建各种应用程序和服务 , 也极大地提高了生产力 。 同时 , 这些语言自身也提供了各种功能 , 如动态类型检查、带有垃圾收集的内存管理 , 以及动态内存安全检查等等 。 为此 , 研究人员用「托管语言」(managedlanguages)专业术语来指代这些类型的编程语言 。
现实来看 , 托管语言越来越多地被用于实现性能至关重要的系统软件上 , 如Hadoop和Spark都在Java虚拟机(JVM)上运行 , 因为它们分别用Java和Scala实现;Kubernetes、etcd(分布式键值存储)和M3(由Uber建立的分布式时间序列数据库和查询引擎)都是用Go实现的 。
当前 , 甚至连操作系统(OS)的内核Biscuit也是用Go实现的 。 Openstack、Paypal、Instagram和Dropbox都大量使用Python , 其中 , Python是Dropbox"在后台服务和桌面客户端应用中使用最广泛的语言" , 在一个存储库中就有近400万行Python代码;JavaScript也被用于Facebook的Bladerunnerpub/sub系统的性能关键路径中 。
在开发过程中 , 编程语言的性能在一开始很少会被考虑到项目中 , 部分原因是不少开发者认为性能问题可以在以后慢慢去解决 , 也许可以通过简单地增加硬件来进行横向扩展 。
不过 , 随着代码产品或服务使用规模的扩大 , 服务变得越来越慢或者硬件成本变高 , 性能成为一个不容忽视的问题 。 这也是为什么Stream要放弃了Python而改用Go、Discord从Go切换到Rust、Twitter从RubyonRails切换到Scala和Java的主要原因 。
不少开发者往往为了提升性能 , 想破脑袋 , 但现实只有两条路 , 一条是从现有的代码中想尽办法尽可能地做优化 , 另一条是思考使用的编程语言是否已经达到了性能极限 , 看看有没有必要将旧的代码移植到一个新的性能更高的语言上 。
为了彻底解开系统软件中不同编程语言导致的性能问题 , 研究人员决定以C++为极限 , 对Java、Go、JavaScript和Python四种编程 , 还有应用最广泛的运行时系统CPython、OpenJDK 。 Node.js与JavaScript的V8引擎进行深入的定量性能分析 。
同时 , 研究人员还从头开始建立了6个应用程序 , 并创建了一个名为LangBench基准(https://github.com/topics/langbench) 。 这些应用程序涵盖了各种不同的计算强度、内存使用、网络和磁盘I/O强度以及可用的并发性的应用场景等复杂性 。 对此 , 研究人员全面分析了它们的完成时间、资源使用和可扩展性 。
测试方法
值得一提的是 , 研究人员指出 , 这份论文没有也不可能全面地回答与语言运行时的性能有关的每一个问题 。 本文只是评估了四种语言的运行时 , 而且对于每种语言 , 只评估了最广泛使用的实现 。 此外 , 研究人员只在一个单一的操作系统/硬件堆栈上运行了工作负载 。 其研究结果与使用的基准有关 , 这些基准模拟了现实生活中的应用 , 但可能不代表广泛的应用 。