多核时代,还在使用任务管理器来看程序的性能吗?
是否为了一个程序只占用了13%的CPU利用率而沾沾自喜呢?
别忘了现在是多核时代,四核,超线程的i7. 单个线程最多只能占到12.5%的CPU利用率。
忘记这个简单的CPU利用率吧,多核时代,你需要具体知道到每个线程的利用率。
这篇博客,来源一个刚刚遇到的问题。
背景是我们正在针对Windows Media Player开发一些东西,具体是什么不重要。
我们遇到了两个不同策略需要做抉择,到底是哪一个好呢?
如果使用任务管理器来看,处理同样的任务,两个策略的CPU使用率都差不多在35%上下,没有太大的区别。(实验的平台是个双核超线程CPU)
但是如果使用更加高级的工具: Windows Performance Analysis Tools, 就能得到更多的信息。
策略A的结果:
在这里可以看到,wmplayer.exe的CPU使用率总共是33.62%, 但是其中有个线程3536的使用率占到了24.34%. 对于双核超线程而言,单线程最大占到25%. 所以线程3536完全成为了系统的瓶颈,即使还有更多的CPU资源,Windows Media Player都不可能跑的更快了。
策略B的结果:
可以看到,wmplayer.exe的CPU使用率为38.66, 还要略高于策略A.
但是,最高的单线程CPU使用率是13.46%,整个CPU的负载被平衡到了不同的线程中。整个系统中没有明显的瓶颈出现了。
孰优孰劣呢?
毫无疑问,策略B更好,Windows Media Player有能力处理规模更大的问题。
至于Windows Performance Analysis Tool怎么用,我就不多说了。外事不决问Google.
最后,惯例。
话说贼不走空,对于那些不喜欢这篇博客,又误入的同学,至少下面的福利你会喜欢。