【问题标题】:Measuring performance difference between Python and Java implementations?测量 Python 和 Java 实现之间的性能差异?
【发布时间】:2019-03-22 15:40:27
【问题描述】:

我想比较同一算法的两种不同实现(Python 和 Java)的性能。我在终端上运行脚本(使用 Ubuntu 18),如下所示:

time script_name

我不确定这有多准确。是否可以提高此基准的准确性?也许有一种方法可以消除 Python 或 Java 中的任何限制或设置?

【问题讨论】:

  • Python中的例子见stackoverflow.com/a/2866456/1358308,其他语言会有类似的文章
  • 注意,如果你使用time来衡量性能,你还要衡量jvm和python解释器的启动时间

标签: java python time terminal benchmarking


【解决方案1】:

time 命令的准确性对于大多数测试来说可能还不错。

但是,如果您愿意,您可以编写第二个 Python 脚本以使用 import subprocess 进行计时,然后使用 subprocess.call() 函数(或 subprocess 模块中的几个相关函数之一)运行两个版本的算法。

您的计时脚本也可以import time,然后在算法运行前后执行datetime.datetime.now().time(),以显示经过了多少时间。

【讨论】:

    【解决方案2】:

    正如this answer 中所述,使用time 对程序进行基准测试的正确方法是以下命令: sudo chrt -f 99 /usr/bin/time --verbose <benchmark>。但是请注意,这只有在算法至少需要一秒钟才能执行时才是准确的,否则exec 调用可能会占用基准测试的很大一部分。

    This answer 建议改用perf stat,如下所示: perf stat -r 10 -d <your app and arguments>.

    【讨论】:

    • 请注意,Java vm 在性能期间有一个“热身”时间是很糟糕的。我不熟悉 Python,但也许它也需要“热身”。有关 java vm,请参阅 stackoverflow.com/q/1481853/6937584
    • 理想情况下,我建议使用真正的基准测试程序,但这个问题是关于如何使用time 命令。
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多