空闲进程通常不做任何有用的工作,除了执行HLT
指令,这会使 CPU 内核进入低功耗状态 ( C1 )。但是,您的基准测试并未消耗 100% 的 CPU 时间这一事实确实为推测正在发生的事情打开了大门。
如果您的应用程序是单线程的并且您的测试系统是多核/超线程/多 CPU,那么您应该会看到大约 50% 的空闲 CPU 时间用于两个内核,75% 用于四个内核,等等。这是因为 CPU 时间百分比在任务管理器中包括所有核心。(我相信旧版本的 Windows 可以选择更改这一点,但我在 Vista 上看不到它。)
如果空闲进程消耗大量 CPU,这可能表明您的应用程序正在花费大量时间休眠。它可能正在等待来自某些外部源(例如磁盘或网络)的数据。它可能会花费大量时间等待同步对象(例如互斥锁或事件)。它也可能会花费大量时间调用该Sleep()
函数。分析您的代码应该确定它在哪里花费时间。
获得完全可重现的基准测试结果可能需要您禁用处理器/磁盘/网络密集型后台应用程序和服务(例如搜索索引、SMS 软件清单、病毒扫描、Windows 更新下载、IncrediBuild/distcc)或将计算机连接到隔离网络(或根本没有网络)。
我假设您为您的应用程序编写了一个基准测试,并且您只是尝试使用任务管理器来诊断为什么基准测试结果与您的预期不符。任务管理器不是衡量应用程序性能的准确方法。