1

我正在 Windows 机器上对我的代码进行一些性能测量,我发现我在测量之间得到了截然不同的结果。在任务管理器系统空闲进程中显示了一个缓慢的临时探索,占用了几乎 100% 的 CPU。

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

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

在说这与编程无关并结束问题之前请三思。除非我认为有理由说它是,否则我不会问它。在这种情况下,我认为这显然是因为它对我的开发和测试环境产生了不利影响,为了解决这个问题,我需要更多地了解它。编程不以编写代码开始和结束。

4

3 回答 3

4

空闲进程通常不做任何有用的工作,除了执行HLT指令,这会使 CPU 内核进入低功耗状态 ( C1 )。但是,您的基准测试并未消耗 100% 的 CPU 时间这一事实确实为推测正在发生的事情打开了大门。

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

如果空闲进程消耗大量 CPU,这可能表明您的应用程序正在花费大量时间休眠。它可能正在等待来自某些外部源(例如磁盘或网络)的数据。它可能会花费大量时间等待同步对象(例如互斥锁或事件)。它也可能会花费大量时间调用该Sleep()函数。分析您的代码应该确定它在哪里花费时间。

获得完全可重现的基准测试结果可能需要您禁用处理器/磁​​盘/网络密集型后台应用程序和服务(例如搜索索引、SMS 软件清单、病毒扫描、Windows 更新下载、IncrediBuild/distcc)或将计算机连接到隔离网络(或根本没有网络)。

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

于 2009-02-08T15:36:00.310 回答
2

系统空闲进程是一种默认进程,当 Windows 没有其他计划运行时,它会在处理器上运行。这个过程就像一个管家,做一些事情,比如试图节省系统电源等。

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

于 2009-02-08T14:44:07.887 回答
-1

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

于 2009-02-08T15:48:44.747 回答