Bash unix中时间命令的开销

Bash unix中时间命令的开销,bash,unix,time,overhead,unix-timestamp,Bash,Unix,Time,Overhead,Unix Timestamp,我想知道在unix中使用time命令的开销是多少 我知道如何使用它,但我想知道该命令还有多长时间 $ time java HelloWorld 接收一个终端,而不是命令 $ java HelloWorld 我特别感兴趣的是,这种开销如何随程序运行的持续时间而变化 上下文:: 我用它来衡量用Java编写的一系列长时间运行的实验所花费的时间。开销是固定的,并且基于,这仅仅是因为启动了一个额外的进程(时间进程本身),引入了少量的额外处理(a)。通常,shell会启动您的程序,但在这种情况下,she

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

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

$ time java HelloWorld
接收一个终端,而不是命令

$ java HelloWorld
我特别感兴趣的是,这种开销如何随程序运行的持续时间而变化

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

开销是固定的,并且基于,这仅仅是因为启动了一个额外的进程(时间进程本身),引入了少量的额外处理(a)。通常,shell会启动您的程序,但在这种情况下,shell会启动
time
time
启动您的进程(使用
fork

这一额外处理包括:

  • 参数处理
  • 对子项执行
    fork
    exec
    所需的时间
当被测量的进程正在运行时,
time
本身只是等待它退出(使用
wait
调用),因此对进程没有影响

因此,虽然
时间
过程的启动时间实际上包括在测量中,但这些时间仅对非常短的过程有意义。如果您的流程运行了相当长的时间,那么
时间的开销与此无关

至于我所说的可感知的含义,您可以看到
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
换句话说,几乎没有任何效果

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



(a) :而且,如果您使用内置了
time
的shell(例如
bash
及其
time
保留字),即使是很小的开销也会消失。

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


在准确性等方面:您运行的程序越短,时间对它的影响就越大。e、 《Hello World》的时间可能不会给你带来好的结果。运行一段时间的时间将非常准确,因为时间的开销在噪音中会大大降低。

对于
zsh
,不带参数运行
time
需要
0.07s
。开销很小,我明白了。。非常感谢您的回复
time
实际上是一个shell内置程序——至少在Bash中是这样,也许在其他程序中也是这样。通过执行
time
来查看它的影响不是更准确吗?假设一个不断启动其他程序的程序也不会受到影响吗?e、 g.ocrmypdf在对PDF文档的每一页进行OCR时都会为其创建一个tesseract进程。@Adam,启动一个进程的成本不是零(但通常很小)。这与时间无关,因为它只启动一个进程,而且通常是相对较长的。如果您有一个每秒钟启动一千个其他进程的进程,您很可能会看到影响。这就是为什么在
bash
中使用
while read
循环一次作用于一个输入行(使用外部进程)通常比只启动一个
sed/awk/perl
一次处理整个输入流要慢。是的。。。我确实从其他关于time命令的问题中读到了噪音,就像我说的,我用它来测量一些用java编写的长时间运行的实验的时间。我只是想确保time命令本身不会添加到已经长时间运行的程序中。谢谢你的回答!