vij*_*jay 6 unix bash time overhead unix-timestamp
我想知道在unix中使用time命令的开销是多少.
我知道如何使用它,但我想知道命令多长时间
$ time java HelloWorld
Run Code Online (Sandbox Code Playgroud)
接受终端,而不是命令
$ java HelloWorld
Run Code Online (Sandbox Code Playgroud)
我特别感兴趣的是这个开销如何随着正在运行的程序的持续时间而变化.
context ::我用它来衡量一堆用Java编写的长期运行实验所花费的时间.
pax*_*blo 12
开销是固定的,并且基于源代码,仅仅是因为正在启动额外的进程(time
进程本身),引入了少量的额外处理(a).通常,shell会启动你的程序,但在这种情况下,shell会启动time
并time
启动你的进程(带有a 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
Run Code Online (Sandbox Code Playgroud)
换句话说,几乎没有任何影响.
现在,既然你只可能是时间过程,如果他们长时间运行(这是很难打理一个单一的过程是否需要一个或两个毫秒,除非你正在运行它的许多连续的时间,在这种情况下有更好的提高性能的方法),固定的开销time
变得越来越不重要.
(a):并且,如果您使用time
内置的shell (例如bash
使用其time
保留字),即使是那么小的开销也会消失.