unix中的time命令开销

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会启动timetime启动你的进程(带有a 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
Run Code Online (Sandbox Code Playgroud)

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

现在,既然你只可能是时间过程,如果他们长时间运行(这是很难打理一个单一的过程是否需要一个或两个毫秒,除非你正在运行它的许多连续的时间,在这种情况下有更好的提高性能的方法),固定的开销time变得越来越不重要.


(a):并且,如果您使用time内置的shell (例如bash使用其time保留字),即使是那么小的开销也会消失.

  • 做“时间”来查看其影响会更准确吗? (2认同)