为什么我每次 运行 "time ./a.out" 在同一个程序上收到不同的 运行 时间?
Why do I receive a different runtime every time I run "time ./a.out" on the same program?
我目前正在尝试减少 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
这是在连续 运行 执行同一命令之后。
在现代系统中,许多进程 运行 并行(或更好的准并行)。这意味着系统在所有进程之间切换。注意:一个进程完成后不会切换到下一个进程。这意味着进程将不得不等待,被阻塞。相反,每个进程都会时不时地获得一些时间,直到它完成。
进程越多,整个系统越慢,以绝对持续时间衡量时,单个进程越慢。那就是你所看到的。
这方面的典型策略称为 "round robin"。您可能想要 google 该术语以阅读有关此主题的更多信息。
首先,让我们明白time
命令会"record the elapsed time or CPU Resource Used time"程序。这转化为程序 运行 在处理器上运行的时间。正如您所注意到的,所有类别中的每个 运行 程序都有不同的时间报告:实时、用户时间和系统时间。
其次,让我们了解现代系统将与系统上 运行ning 的所有其他进程共享处理器(在任何给定时间只有一个进程控制处理器的任何核心),并针对这些进程如何共享处理器和系统资源使用许多不同的方案,因此具有不同的实际时间和用户时间。这些时间取决于您的系统如何换出程序。
系统时间将取决于程序本身,以及它请求的资源。与任何进程一样,如果资源已被另一个进程请求,它将进入睡眠状态,等待资源。根据资源以及您的特定系统处理共享资源的方式,一个进程可能会花费一些空闲时间等待资源,并且只有在计时器超时后才会进入睡眠状态,或者如果处理器可以猜测该资源将花费更长的时间则立即进入睡眠状态比定时器。同样,这在很大程度上取决于您的特定系统如何处理这些任务、您的处理器以及所请求的资源。
我目前正在尝试减少 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
这是在连续 运行 执行同一命令之后。
在现代系统中,许多进程 运行 并行(或更好的准并行)。这意味着系统在所有进程之间切换。注意:一个进程完成后不会切换到下一个进程。这意味着进程将不得不等待,被阻塞。相反,每个进程都会时不时地获得一些时间,直到它完成。
进程越多,整个系统越慢,以绝对持续时间衡量时,单个进程越慢。那就是你所看到的。
这方面的典型策略称为 "round robin"。您可能想要 google 该术语以阅读有关此主题的更多信息。
首先,让我们明白time
命令会"record the elapsed time or CPU Resource Used time"程序。这转化为程序 运行 在处理器上运行的时间。正如您所注意到的,所有类别中的每个 运行 程序都有不同的时间报告:实时、用户时间和系统时间。
其次,让我们了解现代系统将与系统上 运行ning 的所有其他进程共享处理器(在任何给定时间只有一个进程控制处理器的任何核心),并针对这些进程如何共享处理器和系统资源使用许多不同的方案,因此具有不同的实际时间和用户时间。这些时间取决于您的系统如何换出程序。
系统时间将取决于程序本身,以及它请求的资源。与任何进程一样,如果资源已被另一个进程请求,它将进入睡眠状态,等待资源。根据资源以及您的特定系统处理共享资源的方式,一个进程可能会花费一些空闲时间等待资源,并且只有在计时器超时后才会进入睡眠状态,或者如果处理器可以猜测该资源将花费更长的时间则立即进入睡眠状态比定时器。同样,这在很大程度上取决于您的特定系统如何处理这些任务、您的处理器以及所请求的资源。