我应该在时间函数上使用"real"还是"user+sys"?


当您在 Linux 上使用 time 命令时,我理解"real"、"user"和"sys">

之间的区别,如另一个线程所述: 在 time(1( 的输出中,"real"、"user"和"sys"是什么意思?

现在我正在对Python,Java和C的性能进行一个小比较,我想知道我应该使用哪个报告。

"User+sys"似乎是更现实的,但是在比较C和Java时,这是否会导致问题,例如,导致JVM知道如何优化多处理器/线程的代码,而GCC则不知道?

另外,如果我确保没有其他繁重的进程在后台运行,"真实"是否不够逼真?

答案将取决于您所说的"(Python|爪哇|C)".在许多情况下,用户真正关心的是经过的墙壁时间,对应于 real .假设您以合理的方式用多种语言编写了一段代码,其中一种语言可以自动并行化它以使用您的 4 个内核。如果这让用户等待回复的时间更少,那么我说这是一个公平的比较。当然,它对该特定机器有效,单核机器上的结果可能会有所不同。如果应用导致页面错误,则会让用户等待。对于用户来说,如果您说如果他们必须等待更长的时间,应用程序花费的周期更少,则无济于事。

无论您采用哪种测量方法,请务必多次重复测试,因为运行之间可能会有很多变化。像Java这样的语言也需要一个程序运行一段时间才能达到最高速度,由于JIT编译(但同样:如果你的程序在定义上非常短并且不允许Java虚拟机扭曲,那么它对Java来说太糟糕了(。测试性能非常棘手,即使是经验丰富的开发人员也容易误解结果或衡量不是他们真正想要的。

相关内容