前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用数据告诉你 Python 代码比 Java 慢 100 倍!

用数据告诉你 Python 代码比 Java 慢 100 倍!

作者头像
老九君
发布2019-12-24 16:28:13
3.4K0
发布2019-12-24 16:28:13
举报
文章被收录于专栏:老九学堂

小伙伴们都知道,在系统的软件开发中,不仅仅是只使用一种语言,也会涉及到不同的语言。

各个语言之间有共性、也有个性。正是这些不同的个性、注定它们会用在不同的场合来解决不同类型的问题。

而编程语言在开发阶段中也会存在差异性,在软件开发这个抽象的概念下,编程语言的差异性主要体现在编码和编译以及运行上。

先来看看编译型语言定义:

编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)。也就是在运行之前,代码已经被翻译位机器码了。

再来看看解释型语言的定义:

解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。也就是到机器码需要两个步骤,运行前先到中间码,运行时再编译成机器码。

有的小伙伴认为,虽然解释型编程语言可以让开发者更快地编写和测试代码,但仍然认为编译器是值得长期投入的。

编译型代码有两个明显的优势:

  • 每次修改代码都可以得到验证,甚至是在开始运行代码之前。
  • 更快的执行速度。根据具体情况,代码可能被编译成非常底层的运行指令。

于是偏爱编译型语言的小伙伴将 Java 、 Go 和 Python通过比较在处理不同任务时的性能表现,来验证到底编译型代码的执行速度会比解释型快多少。

通过代码比较 JIT 的性能,后来使用 Python 和 Go 也实现了一遍。

这段代码计算 100 的 Fibonacci 数值,每一轮计算 50 次,并打印执行时间(纳秒),共计算 200 轮。

三种语言的输出结果看起来像这样:

平均值是这样:

可以看到,在计算 Fibonacci 数值时,Java 比 Go 要慢一些,大概慢 24%,而 Python 几乎慢了 100 倍,也就是 9458%。

这个结果验证了对 Java 和 Go 的判断,但让我们感到吃惊的是 Python 的表现,它慢得不只是一个数量级,是两个!

Python 为什么会花这么多时间。

很多人关注的是 Python 的易用性,并通过牺牲性能来快速获得处理结果。

相信数据科学家们都是这么想的,况且有这么多现成的库可以用,为什么要去找其他的?迟早会有人优化它们的。

第二个原因是很多人没有比较过不同的实现,因为很多公司在激烈的竞争中忙于做出产品,根本无暇顾及什么优化不优化。

第三个原因,有一些方式可以让同样的 Python 代码跑得更快。

把 Python 代码编译一下会如何?

PyPy 是 Python 的另一个实现,它本身就是使用 Python 开发的,包含了一个像 Java 那样的 JIT 编译器。

跟 Java 一样,我们需要忽略初始的输出,并跳过 JIT 编译过程,得到的结果如下:

PyPy 的平均响应速度比 Python 快 5 倍,但仍然比 Go 慢 20 倍。

通过执行这些简单的数学运算我们可以得出这样的结论:

Go 的执行速度比 Java 快一些,比解释运行的 Python 快 2 个数量级。

所以在高负载的关键任务上使用Python不是一个好的选择。

如果小伙伴正面临这样的情况,可以考虑使用 Python 编译器作为短期的应急方案。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老九学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 把 Python 代码编译一下会如何?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档