为什么每次运行时都会收到不同的运行时间" time ./a.out"在同一个程序?

时间:2015-06-29 11:48:37

标签: linux runtime

我目前正在尝试减少kmeans程序的运行时间,但是每次运行" time ./a.out"命令终端给了我一个不同的答案,即使我没有改变任何代码。有谁知道为什么会这样?

real    0m0.100s
user    0m0.082s
sys 0m0.009s
bash-4.1$ time ./a.out

real    0m0.114s
user    0m0.084s
sys 0m0.006s
bash-4.1$ time ./a.out

real    0m0.102s
user    0m0.087s
sys 0m0.005s
bash-4.1$ time ./a.out

real    0m0.099s
user    0m0.082s
sys 0m0.008s
bash-4.1$ time ./a.out

real    0m0.101s
user    0m0.083s
sys 0m0.006s

这是在连续运行相同的命令之后。

2 个答案:

答案 0 :(得分:0)

在现代系统中,许多过程并行运行(或更好的准并行)。这意味着系统在所有进程之间切换。注意:一个进程完成后,它不会切换到下一个进程。这意味着进程必须等待,被阻止。相反,每个过程现在都会有一点时间,直到它完成。

进程越多,系统总体越慢,单个进程在绝对持续时间内测量得越慢。这就是你所看到的。

这种典型策略称为“循环法”。您可能希望谷歌该术语以阅读有关此主题的更多信息。

答案 1 :(得分:0)

首先,让我们了解程序的time命令"record the elapsed time or CPU Resource Used time"。这意味着程序在处理器上运行了多长时间。如您所知,所有类别的程序每次运行都会报告不同的时间:实时,用户时间和系统时间。

其次,让我们理解现代系统将与系统上运行的所有其他进程共享处理器(在任何给定时间只有一个进程控制处理器的任何核心),并使用许多不同的方案来处理这些进程共享处理器和系统资源,因此实时和用户时间不同。这些时间取决于您的系统如何交换程序。

sys时间取决于程序本身以及它请求的资源。与任何进程一样,如果资源已被另一个进程请求,它将进入休眠状态,等待资源。根据资源以及特定系统如何处理共享资源,进程可能会花费一些空闲时间等待资源,并且只有在计时器超时后才会进入休眠状态,或者如果处理器可以猜测资源需要更长时间比计时器。同样,这在很大程度上取决于您的特定系统如何处理这些任务,处理器以及所请求的资源。