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

2022 年 7 月 29 日 CSDN

整理 | 苏宓
出品 | CSDN(ID:CSDNnews)

近日,来自多伦多大学和 YScope 公司(为软件系统提供创新的日志管理和故障排除工具。由一群计算机工程教授和博士创立)的 David Lion、多伦多大学 Adrian Chiu 和 Michael Stumm、多伦多大学和 YScope 公司 Ding Yuan 共同发布了一份《调查托管语言的运行时性能:为什么 JavaScript 和 Python 比 C++ 慢了 8 倍和 29 倍,而 Java 和 Go 却能更快》(https://www.usenix.org/system/files/atc22-lion.pdf)的论文分析报告,深度剖析了不同编程语言运行时在代码开发中真实的性能情况,由此方便开发者可以精确地测量执行任何字节码指令所花费的时间等。


性能是系统软件不得不面对的挑战


在报告中,研究人员指出,自 2015 年以来,具有集成运行时环境的编程语言越来越受欢迎,其中,全球知名的代码托管平台 GitHub 上最受欢迎的三种语言分别是 JavaScript、Java 和 Python。

作为开发利器,编程语言帮助开发者快速构建各种应用程序和服务,也极大地提高了生产力。同时,这些语言自身也提供了各种功能,如动态类型检查、带有垃圾收集的内存管理,以及动态内存安全检查等等。为此,研究人员用「托管语言」(managed languages)专业术语来指代这些类型的编程语言。

现实来看,托管语言越来越多地被用于实现性能至关重要的系统软件上,如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 的 Bladerunner pub/sub 系统的性能关键路径中。

在开发过程中编程的性能在一开始很少会被考虑到项目中部分原因是不少开发者认为性能问题可以在以后慢慢去解决,也许可以通过简单地增加硬件来进行横向扩展

不过,随着代码品或服务使用规模的扩大,服务变得越来越慢或者硬件成本变高,性成为一个不容忽视的问题这也是为什么 Stream 要放弃了 Python 而改用 Go、 Discord 从 Go 切换到 Rust、Twitter 从 Ruby on Rails 切换到 Scala 和 Java 的主要原因。

不少开发者往往为了提升性能,想破脑袋,但现实只有两条路,一条是从现有的代码中想尽办法尽可能地做优化,另一条是思考使用的编程语言是否已经达到了性能极限,看看有没有必要将旧的代码移植到一个新的性能更高的语言上。

为了彻底解开系统软件中不同编程语言导致的性能问题,研究人员决定以 C++ 为极限,对 Java、Go、JavaScript 和 Python 四种编程,还有应用最广泛的运行时系统 CPython、OpenJDK。Node.js 与 JavaScript 的 V8 引擎行深入的定量性能分析。

同时,研究人员还从头开始建立了 6 个应用程序,并创建了一个名为 LangBench 基准(https://github.com/topics/langbench)。这些应用程序盖了各种不同的计算强度、内存使用、网络和磁盘 I/O 强度以及可用的并发性的应用场景等复杂性对此,研究人员全面分析了它们的完成时间、资源使用和可扩展性。


测试方法


值得一提的是,研究人员指出,这份论文没有也不可能全面地回答与语言运行时的性能有关的每一个问题。本文只是评估了四种语言的运行时,而且对于每种语言,只评估了最广泛使用的实现。此外,研究人员只在一个单一的操作系统/硬件堆栈上运行了工作负载。其研究结果与使用的基准有关,这些基准模拟了现实生活中的应用,但可能不代表广泛的应用。

在测试方法上,研究人员在两台内部服务器上进行了实验,每台服务器有 2 个Xeon E5-2630V3、16 个虚拟核心、2.4GHz CPU、256GB DDR4 内存和两个 7200 RPM 硬盘。它们运行的系统是 Linux 4.15.0,并通过 10Gbps 的互联网络连接。

对于 C++ 程序,研究人员使用的是 GCC 9.3.0 根据 C++17 标准用 -O3 进行编译。对于 OpenJDK 13、CPython 3.8.1 和Go 1.14.1 ,其使用了各自语言的参考实现。同时,使用 Node.js 13.12.0 和 V8 7.9.317.25 版本。

研究人员对每个基准进行了 5 次测试,取平均值。其中,在运行键-值存储、日志分析器和文件服务器的基准时,client 和 worker 线的数量从 1 到 1024 不等。对于 OpenJDK 和 V8 来说,最小的内存量是通过确定不会导致崩溃的第一个堆配置来设置的;对于 Go 来说,GOGC 被设置为5%。然后研究人员不断增加堆的设置,直到性能不再提高。其使用第一个设置的结果(即最小的堆大小)得出最佳性能。对于日志解析器和文件服务器基准,所用的日志文件被存储在一个复制系数为 2 的分布式文件系统上。 在运行每个基准之前,研究人员都清除了 Linux 的页面缓存,以保证测试准确性。


Java、Go 更具竞争力,JavaScript、Python 比 C++慢了 8 倍和 29 倍


最终 LangBench 中各项基准的运行时间结果如下所示:

其中,优化的 GCC 平均速度最快,Go 和 OpenJDK 紧随其后,比 GCC 慢了  1.30 倍和 1.43 倍。令人印象深刻的是,在 12 项基准测试中,Go 和 OpenJDK 有 3 项超过了优化的 GCC。

总体而言,研究人员发现 V8 / Node.js 和 CPython 表现最差,执行应用程序的平均速度分别比 C++ 应用程序慢 8.01 倍和 29.50 倍,这意味着运行时下,JavaScript、Python 要比 C++ 慢这么多。更糟糕的是,这两个运行时上的应用程序扩展性很差,因为它们无法有效地利用多个内核。在极端情况下,CPython 比 GCC 慢了 129.66 倍(在排序基准中)。V8/Node.js 和 CPython 只有在工作负载受到磁盘 I/O 的瓶颈时,即在文件服务器基准中,才与 GCC 有竞争力。

相比之下,OpenJDK 和 Go 应用程序即 Java 和 Go 语言比 C++ 更具有性能竞争力,运行速度仅慢了 1.43 倍和 1.30 倍,并且可以轻松扩展到多个内核。在一些应用中,OpenJDK 和 Go 的性能超过了 C++ 的同类产品。

更多完整报告内容详见:https://www.usenix.org/system/files/atc22-lion.pdf

   
   
     
— 推荐阅读 —
    
    
      
☞眼睛小被误判“开车睡觉”?网友:这波不怪小鹏,真的
损失37亿!Intel将彻底退出傲腾存储业务;支付宝新增一键取消「自动扣款」功能;iOS 15.5验证通道关闭|极客头条
☞在 M1/M2 Mac 上,让 Windows 11 免费“跑”起来!

新程序员001-004》已全面上市 

扫描下方二维码或点击进入立即订阅

登录查看更多
3

相关内容

JavaScript 是弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程。
【干货书】Python中的数据结构和算法,928页pdf
专知会员服务
113+阅读 · 2022年9月25日
【2022新书】Python DevOps,245页pdf
专知会员服务
89+阅读 · 2022年7月11日
【干货书】Python3编程高级指南,494页pdf
专知会员服务
90+阅读 · 2022年5月18日
【干货书】《Pydon'ts:编写优雅的Python代码》,263页pdf
专知会员服务
91+阅读 · 2021年11月2日
专知会员服务
91+阅读 · 2020年12月26日
【干货书】Python 编程,480页pdf
专知会员服务
237+阅读 · 2020年8月14日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
Python 是最受欢迎的语言?名不副实
CSDN
0+阅读 · 2022年4月29日
“C 不再是一种编程语言!”
CSDN
0+阅读 · 2022年4月4日
无处不在的 JavaScript
InfoQ
0+阅读 · 2022年3月15日
Python的十大特性
AI前线
0+阅读 · 2021年12月24日
Python 的十大特性
InfoQ
0+阅读 · 2021年12月21日
2021 年 Python 的好与坏
InfoQ
2+阅读 · 2021年11月16日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2010年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Testing by Dualization
Arxiv
0+阅读 · 2022年10月3日
VIP会员
相关VIP内容
【干货书】Python中的数据结构和算法,928页pdf
专知会员服务
113+阅读 · 2022年9月25日
【2022新书】Python DevOps,245页pdf
专知会员服务
89+阅读 · 2022年7月11日
【干货书】Python3编程高级指南,494页pdf
专知会员服务
90+阅读 · 2022年5月18日
【干货书】《Pydon'ts:编写优雅的Python代码》,263页pdf
专知会员服务
91+阅读 · 2021年11月2日
专知会员服务
91+阅读 · 2020年12月26日
【干货书】Python 编程,480页pdf
专知会员服务
237+阅读 · 2020年8月14日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
相关资讯
Python 是最受欢迎的语言?名不副实
CSDN
0+阅读 · 2022年4月29日
“C 不再是一种编程语言!”
CSDN
0+阅读 · 2022年4月4日
无处不在的 JavaScript
InfoQ
0+阅读 · 2022年3月15日
Python的十大特性
AI前线
0+阅读 · 2021年12月24日
Python 的十大特性
InfoQ
0+阅读 · 2021年12月21日
2021 年 Python 的好与坏
InfoQ
2+阅读 · 2021年11月16日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2010年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员