之前在微软的《编程之美》中有道题目大概是“控制任务管理器中cpu的曲线”,也就是根据自己的意愿来控制cpu的占有率。而我今天只想说的是如何让cpu占有率为100%。
首先,我写了如下程序:
void main()
{
while(true)
{
int n = 10;
}
}
也就是执行一个死循环,让cpu没有空闲,理论上说cpu的占有率就应该是100%。
当我打开windows任务管理器,查看cpu占有率,图如下:
很明显cpu占有率只有30%左右,跟理想情况100%差别很大。
后来我发现cpu使用记录中有四幅cpu的曲线图,以前从来没有认真去看过,这四幅图是什么意思。在网上查了,才知道这四幅图分别表示cpu0、cpu1、cpu2、cpu3的使用记录。也就说我电脑上有4个cpu。我看了一下电脑的配置,双核。这就对了,每个核可以虚拟出两个cpu,总共四个cpu。
再回到程序,这个线程虽然是一直忙的,但是它可能被不同的cpu调度。如果时间片平均在每个cpu上,并且假设每个cpu性能一样,那么该线程在每个cpu上的占有率应该为25%,再加上其他程序的占有率,接近30%,差不多。
那么如何是该程序只运行在一个cpu上呢?可以在程序中设定。但是我们选择更简单的方法,在任务管理器中设置。如下图:
选择你的进程,鼠标右键,选择设置相关性。
从这里可以选择cpu,注意选择cpu以后不要重启程序,直接去性能窗口看cpu即可。
我只选择cpu0,然后再观察cpu占有率,发现cpu0的占有率为100%,跟预想情况一样了。
总结:现在单个cpu的计算机已经很少了,就算是单核,多半会虚拟出两个cpu。通过该例子,可以大致理解,线程被多cpu调度的情况。