问题:
- CPU 刻度是如何计算的以及它代表什么?
- 单个是否
tick
等同于10 miliseconds
因此如果某个线程报告不需要(5 * 10 ticks = 500 ticks
)这是否意味着 CPU 可能太忙而无法安排上述线程工作?
答案1
A打钩是用于测量内部系统时间的任意单位。通常有一个用于计时的操作系统内部计数器;操作系统各种功能使用的当前时间和日期均来自该计数器。
一个刻度代表多少毫秒取决于操作系统,甚至可能因安装而异。使用操作系统的机制将刻度转换为秒。
- 在 MS Windows 上,一毫秒中有 10,000 个刻度(参见http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx)。
- 在 Linux 上,可以使用 获取每秒的时钟滴答数
sysconf(_SC_CLK_TCK);
。例如参见http://linux.die.net/man/2/times
至于线程报告未被调用的原因:这取决于线程是否在某处阻塞(等待、I/O 等)。如果它没有阻塞,那么是的,操作系统的调度程序将决定何时运行,如果系统繁忙,这可能需要很长时间。
编辑:
请注意,也许不幸的是,一些作者还使用打钩作为的同义词处理器时钟周期(例如本文)我相信这种用法不太普遍,但最好还是先弄清楚人们在谈论什么。
答案2
答案3
除了 sleske 的答案之外,我还编写了一个 C 程序来打印“每秒操作系统刻数” ft
:
// C headers
#include <stdio.h>
// Posix headers
#include <unistd.h>
int main(int argc, char * argv[]){
long ft; // OS ticks per second
t = sysconf(_SC_CLK_TCK);
printf("ft = %ld\n\n", ft);
return 0;
}
在我的情况下,我使用的是 OS Linux Debian 系统,当我编译并运行此 C 程序时,它将始终打印ft = 100
。请注意,这里没有写单位,而是“每秒滴答数”。因此,这是一个频率!我们可以用单位来表示它:
ft = 100 1/s
t
如果我们想从频率中得到周期,ft
这个方程就是缺失的环节。
t = 1/ft
⟹ t = 1/(100 1/s)
⟹t = 1/100 s
让我们将其转换为˙ms˙:
t = 1/100 s = (1 * 10^(-3)) s / (100 * 10^(-3)) = 1 * m s / (100 * 10^(-3)) = 1 * m s * 10^3 * 10^(-2) = 10^4 ms = 10 ms
。
因此每次10 ms
在 Linux Debian 操作系统上都会发生这种情况。