2

当您在 Linux 上使用 time 命令时,我了解“real”、“user”和“sys”之间的区别,正如另一个线程中所解释的那样:What do 'real', 'user' and 'sys' mean in the output时间(1)?

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

“用户+系统”似乎是更现实的一个,但是在将 C 与 Java 进行比较时,这不会导致问题,例如,因为 JVM 知道如何优化多处理器/线程的代码,而 GCC 不知道?

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

4

1 回答 1

3

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

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

于 2012-05-17T12:49:06.647 回答