bash - unix中时间命令的开销

标签 bash unix time overhead unix-timestamp

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

我知道怎么用,但是我想知道这个命令要多长时间

$ time java HelloWorld

接受终端,而不是命令

$ java HelloWorld

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

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

最佳答案

开销是固定的,基于 source code , 只是因为正在启动一个额外的进程(time 进程本身),引入了少量的额外处理(a)。通常,shell 会启动您的程序,但在这种情况下,shell 会启动 timetime开始你的过程(使用 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/

相关文章:

ios - 如何测量 iOS Safari 上的页面加载时间?

c++ - 在 QT 中运行有延迟的函数

c - UNIX:程序中的最大线程数

c - Unix 最大子进程数

linux - shell 程序中不显示日期

linux - 使用 awk 从 2 个过滤文件中删除重复项

c++ - C++计算中的时间

java - Android:getElapsedCpuTime 返回较少的毫秒数

linux - 使用 sed 更新文件使字符出现在行尾

linux - ssh到另一台主机,运行涉及其他脚本的脚本,如何仅杀死其他脚本?