我正在使用AWS创建一个排序比较工作台来托管排序lambda
我用python(python3.8)和javascript(nodejs12.x)lambdas实现了一个冒泡排序算法。两者都分配了512MB内存
当我使用数组长度N为1到5500的数组对彼此运行时,我得到了下面的图表。N在x轴上,时间在y轴上以毫秒为单位:
虽然我预计冒泡排序会很慢,但我并不期望Python比Javascript慢100倍。JS达到的最大毫秒数约为120毫秒,而Python达到的最大毫秒数约为11100毫秒
也许有AWS相关的解释,或者我的实现非常缓慢
更新: 我将运行时从CPython切换到pypypy,这将运行bubble sort的时间减少了x100,图形现在更接近了,因此时间差是由编译器造成的:
Python需要运行CPython来解释、编译代码并运行它。它以某种方式创建了一个层来处理它,因此需要更多的时间。 你可以看到更多here
NodeJS可以使用本机Javascript指令进行编译,运行代码需要几秒钟
当然,“问题是您正在实现一个气泡(!)排序!”
当您现在使用的任何一种语言都可以对事物进行排序时,您为什么要实现自己的“排序算法”
“你不再上学了!”
cpython和node在解释代码的方式上有所不同:
Python(标准的cpython)被编译成字节码,然后进行解释。因此,解释器大部分时间都花在包含一个大开关盒的循环中。(见https://github.com/python/cpython/blob/5f18c223391eef8c7d01241b51a7b2429609dd84/Python/ceval.c#L1622)
node.js(使用V8)和PyPy使用即时编译。这类问题(紧循环、同构类型)是JIT最擅长的:如果解释器发现某些代码经常使用相同的类型运行,JIT将为其生成并优化本机代码
相关问题 更多 >
编程相关推荐