我想知道在 unix 中使用 time 命令的开销是多少。
我知道怎么用,但是我想知道这个命令要多长时间
$ time java HelloWorld
接受终端,而不是命令
$ java HelloWorld
我特别感兴趣的是这种开销如何随程序运行的持续时间而变化。
上下文:: 我用它来衡量用 Java 编写的一系列长时间运行的实验所花费的时间。
最佳答案
开销是固定的,基于 source code , 只是因为正在启动一个额外的进程(time
进程本身),引入了少量的额外处理(a)。通常,shell 会启动您的程序,但在这种情况下,shell 会启动 time
和 time
开始你的过程(使用 fork
)。
这个额外的处理包括:
- 参数处理。
- 到
fork
所用的时间和exec
child 。
当被测量的进程正在运行时,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
的 shell内置(例如 bash
及其 time
保留字),即使是很小的开销也消失了。
关于bash - unix中时间命令的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11838458/