2009-02-08 30 views
1

我在Windows上对我的代码进行了一些性能测量,我发现测量之间的结果差异很大。在任务管理器系统空闲进程占用几乎100%的CPU时,稍慢一点的临时探索就会显示出来。Windows系统空闲进程干扰性能测量

有谁知道系统闲置进程的实际含义以及它可能运行的Windows功能?

注意:我没有使用任务管理器来衡量性能,我只是用它来看看在特别慢的测量期间还有哪些运行。

请先考虑一下,这是不是编程相关和关闭问题。除非我认为有理由说明这一点,否则我不会问这个问题。在这种情况下,我认为这显然是因为它对我的开发和测试环境造成了不利影响,为了整理它,我需要更多地了解它。编程不会以编写代码开始和结束。

回答

4

除了执行HLT指令(该指令使CPU内核进入低功耗状态(C1))之外,空闲进程通常不会执行任何有用的工作。但是,您的基准测试不会占用100%的CPU时间,这对于猜测正在发生的事情打开了大门。

如果您的应用程序是单线程的,并且您的测试系统是多核/超线程/多CPU,那么您应该会看到两个核心的空闲CPU时间为50%左右,四个人为75%任务管理器中的CPU时间百分比包括所有内核。 (我相信老版本的Windows有一个选项可以改变这一点,但我没有在Vista上看到它。)

如果空闲进程占用大量的CPU,那可能表明您的应用程序正在花费一个很多时间睡觉。它可能正在等待来自某些外部来源(例如磁盘或网络)的数据。它可能花费很多时间等待同步对象(例如互斥或事件)。它也可能花费很多时间调用Sleep()函数。分析你的代码应该确定它花费的时间。获得完全可重复的基准测试结果可能需要您禁用处理器/磁​​盘/网络密集型后台应用程序和服务(例如搜索索引,SMS软件清单,病毒扫描,Windows更新下载,IncrediBuild/distcc)或连接机器到一个孤立的网络(或根本没有网络)。

我假设你为你的应用程序编写了一个基准测试,并且你只是试图使用任务管理器来诊断为什么基准测试结果不符合你的预期。任务管理器不是测量应用程序性能的准确方法。

2

系统空闲进程是Windows在处理器上运行时的一种默认进程,当它没有别的计划运行时。这个过程就像一个管家一样,试图节省系统电源等。

如果您要测量程序的性能,请不要使用Windows任务管理器。改为使用性能监视器(您可以通过在命令行键入'perfmon'开始)。或者更好的是,使用profiler

-1

如果你的“系统空闲进程”占用了100%,那么你的机器基本上是无聊的,什么都没有发生。如果在任务管理器中将所有事情加起来,则从100%中减去该数字,然后您将获得“系统空闲进程”的值。注意它几乎不消耗内存,不会影响性能。