我想知道在unix中使用time命令的开销是多少。
我知道如何使用它,但我想知道命令多长时间
$ time java HelloWorld
接受终端,而不是命令
$ java HelloWorld
我特别对此开销如何随正在运行的程序的持续时间而变化感兴趣。
上下文:: 我用它来衡量一堆用Java编写的长期运行实验所需的时间。
答案 0 :(得分:10)
开销是固定的,并且基于source code,仅仅是因为正在启动额外的进程(time
进程本身),引入了少量的额外处理< SUP>(a)中。通常,shell会启动你的程序,但在这种情况下,shell启动time
并time
启动你的进程(使用fork
)。
此额外处理涉及:
fork
和exec
所花费的时间。当正在测量的过程正在运行时,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
保留字),即使是那么小的开销也会消失。
答案 1 :(得分:3)
time
的开销应该是相当稳定的,无论程序被定时。它所要做的就是获取时间戳,运行程序,获取另一个时间戳并输出结果。
在准确性等方面:您运行的程序越短,time
对其产生的影响就越大。例如时间&#34; Hello World&#34;可能不会给你带来好成绩。在运行一段时间的东西上的时间将是非常准确的,因为时间的开销将在噪音中很好地下降。