我在Windows机器上对我的代码进行了一些性能测量,我发现测量之间的结果差异很大。在任务管理器系统空闲进程占用几乎100%的CPU时,可以在一个缓慢的过程中进行快速的临时探索。
有谁知道System Idle Processes实际意味着什么以及它可能正在运行的Windows功能?
注意:我没有使用任务管理器测量性能,我只是用它来查看在特别慢的测量过程中运行的是什么。
在说这不是编程相关并结束问题之前请先考虑一下。我不会问它,除非我认为有理由说它是。在这种情况下,我相信它显然是因为它对我的开发和测试环境产生了不利影响,为了解决这个问题,我需要对它有所了解。编程不会以编写代码开始和结束。
答案 0 :(得分:4)
除执行HLT
指令外,空闲进程通常不会执行任何有用的工作,这会将CPU内核置于较低功耗状态(C1)。但是,你的基准测试没有消耗100%的CPU时间这一事实确实为猜测正在发生的事情打开了大门。
如果您的应用程序是单线程的,并且您的测试系统是多核/超线程/多CPU,那么您应该会看到两个内核的空闲CPU时间约为50%,四个内存为75%,等等。这是因为任务管理器中的CPU时间百分比包括所有核心。 (我相信旧版本的Windows可以选择更改它,但我没有在Vista上看到它。)
如果空闲进程占用大量CPU,则可能表明您的应用程序正在花费大量时间进行休眠。它可能正在等待来自某些外部源(例如磁盘或网络)的数据。它可能花费大量时间等待同步对象(例如互斥对象或事件)。它也可能花费大量时间调用Sleep()
函数。分析代码应该确定它花费时间的位置。
获得完全可重现的基准测试结果可能需要您禁用处理器/磁盘/网络密集型后台应用程序和服务(例如搜索索引,SMS软件清单,病毒扫描,Windows Update下载,IncrediBuild / distcc)或将计算机连接到一个孤立的网络(或根本没有网络)。
我假设您为应用程序编写了一个基准测试,并且您只是尝试使用任务管理器来诊断基准测试结果不符合您预期的原因。任务管理器不是衡量应用程序性能的准确方法。
答案 1 :(得分:2)
系统空闲进程是一种默认进程,当Windows没有其他计划运行时,它在处理器上运行。这个过程就像一个管家,做一些事情,比如试图节省系统电源等。
如果您正在测量程序的性能,请不要使用Windows任务管理器。请改用性能监视器(您可以在命令行键入“perfmon”开始)。或者更好的是,使用profiler。
答案 2 :(得分:-1)
如果你的“系统空闲进程”占据了100%,那么基本上你的机器很无聊,什么也没发生。如果你在任务管理器中添加所有内容,从100%中减去这个数字,那么你将获得“系统空闲进程”的值。请注意,它几乎不消耗任何内存,也不会影响性能。