8

我想知道在 unix 中使用 time 命令的开销是多少。

我知道如何使用它,但我想知道命令多长时间

$ time java HelloWorld

使用终端,而不是命令

$ java HelloWorld

特别感兴趣的是这种开销如何随着正在运行的程序的持续时间而变化。

context:: 我用它来测量用 Java 编写的一系列长时间运行的实验所花费的时间。

4

2 回答 2

15

开销是固定的,根据源代码,只是由于正在启动一个额外的进程(time进程本身),引入了少量的额外处理(a)。通常,shell 会启动您的程序,但在这种情况下,shell 会启动timetime启动您的进程(带有fork)。

这种额外的处理包括:

  • 论据处理。
  • 花费的时间forkexec孩子。

当被测量的进程正在运行时,time它本身只是在等待它退出(通过wait调用),因此对进程没有影响。

因此,虽然过程的启动时间time实际上包含在测量中,但这些仅对非常短的过程很重要。如果您的流程运行了相当长的时间,那么开销time就无关紧要了。

至于我所说的明显是什么意思,您可以time通过使用非常快速的可执行文件运行它来看到效果,并且还可以查看它是否对长时间运行的进程有任何明显的开销增加:

pax> time sleep 0
real    0m0.001s
user    0m0.000s
sys     0m0.000s

pax> time sleep 1
real    0m1.001s
user    0m0.000s
sys     0m0.000s

pax> time sleep 10
real    0m10.001s
user    0m0.000s
sys     0m0.004s

pax> time sleep 100
real    1m40.001s
user    0m0.000s
sys     0m0.000s

换句话说,几乎没有任何影响。

现在,因为如果它们是长时间运行的,你可能只是对它们进行计时(除非你连续运行多次,否则很难关心单个进程是否需要一两毫秒在这种情况下有更好的提高性能的方法),固定开销time变得越来越不重要。


(a):而且,如果您使用time内置的外壳(例如bash带有time保留字),那么即使是很小的开销也会消失。

于 2012-08-07T02:37:56.363 回答
3

无论程序是否定时,开销都time应该是相当恒定的。它所要做的就是获取一个时间戳,运行程序,获取另一个时间戳并输出结果。

在准确性等方面:您运行的程序越短,对它的影响time就越大。例如,在“Hello World”上的时间可能不会给你带来好的结果。运行一段时间的时间将非常准确,因为时间的开销将大大降低。

于 2012-08-07T02:39:41.993 回答