【问题标题】:Why is a Python Lambda wildly slower than a Javascript Lambda with the same functionality?为什么 Python Lambda 比具有相同功能的 Javascript Lambda 慢得多?
【发布时间】:2021-05-09 05:15:55
【问题描述】:

我正在使用 AWS 创建一个排序比较工作台来托管排序 lambda。

我有一个在 python (python3.8) 和 javascript (nodejs12.x) lambdas 中实现的冒泡排序算法。两者都分配了 512MB 内存。

当我以 1 到 5500 的数组长度 N 对彼此运行时,我得到下图。 N 在 x 轴上,在 MS 中的时间在 y 轴上:

虽然我预计冒泡排序会很慢,但我没想到 Python 会比 Javascript 慢 100 倍。 JS 达到的最大毫秒数约为 120,而 Python 约为 11100。

可能有AWS相关的解释,还是我的实现很慢?

更新: 我将运行时从 CPython 切换到 PyPy,这将运行冒泡排序的时间减少了 x100,图表现在更接近,因此时间差异是由于编译器造成的:

【问题讨论】:

  • 你试过在本地运行这些吗?他们在本地显示同样的问题吗?
  • @LimH。大声喊叫 - 我现在就试试看。
  • node/v8 使用即时编译器,cpython 没有。像这里这样的紧密循环可以从 JIT 中获益良多。 pypy(及时编译的python)也很慢吗?
  • @thejonny 感谢您提供的信息!我将创建一个新的运行时并尝试一下
  • @thejonny 我已经用切换到 PyPy 的结果更新了问题,并且成功了!您能否将您的评论添加为答案,以便我将其标记为已接受?

标签: javascript python amazon-web-services sorting aws-lambda


【解决方案1】:

当然,“问题在于您正在实现 bubble(!) 排序!”

你为什么要实现你自己的“排序算法”,当你现在正在做的任何一种语言已经可以“对事物进行排序?”

“你已经不在学校了!”

【讨论】:

  • 嗨 Mike - 请阅读问题的第一行 - 我正在创建一个排序工作台来比较不同算法实现的执行时间。实现我自己的冒泡排序是项目的重点。
【解决方案2】:

Python 需要运行 CPython 来解释和编译代码并运行它。它以某种方式创建了一个层来处理它,因此需要更多时间。 你可以看到更多here

NodeJS 可以使用原生 Javascript 指令进行编译,运行代码需要几秒钟的时间。

【讨论】:

  • 我现在使用 PyPy 作为运行时,我的时间提高了 100 倍
【解决方案3】:

cpython 和 node 的代码解释方式不同:

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多