Linux 我是否应该使用“;“真正的”;或;用户+;sys";关于时间函数?

Linux 我是否应该使用“;“真正的”;或;用户+;sys";关于时间函数?,linux,time,Linux,Time,我理解在Linux上使用time命令时“real”、“user”和“sys”之间的区别,正如在另一个线程中所解释的: 现在,我正在对Python、Java和C的性能进行一个小的比较,我想知道应该使用哪个报告 “User+sys”似乎更为现实,但在将C与Java进行比较时,这是否会导致问题,例如,JVM知道如何优化多处理器/线程的代码,而GCC不知道 另外,如果我确保没有其他繁重的进程在后台运行,“real”难道还不够现实吗?答案将取决于您所说的“Python | Java | C的性能”是什么意

我理解在Linux上使用time命令时“real”、“user”和“sys”之间的区别,正如在另一个线程中所解释的:

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

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


另外,如果我确保没有其他繁重的进程在后台运行,“real”难道还不够现实吗?

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


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

你似乎想衡量周期而不是时间,也许你应该使用另一种工具,不知道哪种工具。我知道周期会更好,但是,时间不够精确,不能很好地了解每种语言的性能吗?别忘了页面错误。用户和系统中都不考虑它们。缓存未命中时,时钟一直在滴答作响,但在页面错误期间,您的进程基本上停止了记帐。而且页面错误代价高昂。