测量不同语言的执行时间

问题描述

我正在做一个项目,目的是比较不同语言的排序算法。我的比较将分为两种类型:

  1. 基于日历时间的比较
  2. 基于处理器时间的比较

我想知道,如果我可以比较这些方法/功能/过程:

基于日历时间的比较

  1. Java - System.nanoTime() 然后毫秒时差 /1000000

  2. Python - time.time() 然后时差 *1000

  3. C - gettimeofday() 然后

     totalTime = (end.tv_sec - start.tv_sec) * 1e6;
     totalTime = (totalTime + (end.tv_usec -  start.tv_usec)) * 1e-3;
    
  4. Pascal - Now 然后使用 MilliSecondsBetween() 的时差

基于处理器时间的比较

  1. Java - getThreadcpuTime() 然后是时差

  2. Python - thread_time() 然后是时差

  3. C - clock() 然后时差

  4. Pascal - getTickCount64 然后时差 //这个我不太确定,可以给点建议吗?

解决方法

我会使用外部工具进行此类测量。 必须记住,性能测量是一个棘手的领域,您必须确保每个实现的环境条件和输入都相同。

不止于此:

  • C 程序的性能可能因所使用的编译器和编译器标志而异。
  • python 程序的性能将取决于解释器实现 Cython 或 Jython 等。
  • 有多个 Java 实现 OpenJDK、Oracle java 等。

很难比较不同语言的算法实现的性能,因为因素太多。

作为测量工具,您可以从 linux time 命令开始:

time java_program
# some output
real    0m20.608s
user    0m0.007s
sys 0m0.000s

time c_program
# some output
real    0m20.608s
user    0m0.007s
sys 0m0.000s
...

More about time command

对于 Windows,有一个关于它的 powershell cmd-let Measure-Command,more