Linux 为什么每次在同一程序上运行“time./a.out”时,我都会收到不同的运行时?

Linux 为什么每次在同一程序上运行“time./a.out”时,我都会收到不同的运行时?,linux,runtime,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

我目前正在尝试减少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

这是在连续运行同一个命令之后进行的。

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

进程越多,系统整体速度越慢,以绝对持续时间衡量单个进程的速度就越慢。这就是你看到的


这方面的典型策略称为循环赛。你可能想通过谷歌搜索这个词来了解更多关于这个话题的信息

首先,让我们了解时间命令将影响程序的运行。这意味着程序在处理器上运行的时间。正如您所注意到的,在所有类别中,程序每次运行都会报告不同的时间:实时、用户时间和系统时间

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


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

如果time命令给出的答案不断变化,我如何知道我对代码所做的任何更改是否真的减少了运行时?通过进行统计测量。执行1000次,取平均执行时间。你不能再靠近了。