问题描述
我正在做一个项目,目的是比较不同语言的排序算法。我的比较将分为两种类型:
基于日历时间的比较
-
Java -
System.nanoTime()
然后毫秒时差 /1000000 -
Python -
time.time()
然后时差 *1000 -
C -
gettimeofday()
然后totalTime = (end.tv_sec - start.tv_sec) * 1e6; totalTime = (totalTime + (end.tv_usec - start.tv_usec)) * 1e-3;
-
Pascal -
Now
然后使用MilliSecondsBetween()
的时差
基于处理器时间的比较
-
Java -
getThreadcpuTime()
然后是时差 -
Python -
thread_time()
然后是时差 -
C -
clock()
然后时差 -
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
...
对于 Windows,有一个关于它的 powershell cmd-let Measure-Command
,more