为什么是空的while循环使用更多的CPU?

时间:2013-08-05 09:27:30

标签: c++ cpu

我有两个程序应该做同样的事情,略有不同。除非用户以某种方式停止游戏,否则两者都有无限的游戏循环。其中一个程序的游戏循环是实现并渲染的东西,另一个游戏循环是空的,什么也不做(只是听取用户停止)。

当我打开任务管理器以查看资源使用情况时,我发现使用空循环的程序使用14%的CPU,实际绘制屏幕内容的程序使用大约1-2%。

我对这个问题的猜测如下:

我比较了两个程序的代码,并寻找差异,并没有太多。然后我发现渲染到屏幕的循环可能受到其他因素的限制(比如将像素发送到屏幕,刷新率可能是?)因此在CPU完成后,它会使该线程进入睡眠状态,直到其他内容完成为止。但是,由于其他程序几乎没有任何功能,并且什么也不做是非常容易的,因此CPU永远不会让该线程处于休眠状我缺乏确认如果这是原因的知识,所以我问你。这是发生这种情况的原因吗? (奖金问题)如果是这样,为什么CPU停止在14%左右而不是一直到100%?

谢谢。

1 个答案:

答案 0 :(得分:3)

很难说没有看到代码,但是画到屏幕上,不可避免地需要等待一些IO;多少取决于许多因素,包括同步+缓冲选项。

至于14%的cpu使用率 - 我猜你的机器有8个处理单元(核心或核心*超线程),你的代码是单线程的 - 即它最大化了一个处理单元。