是否为了一个程序只占用了13%的CPU利用率而沾沾自喜呢?

clip_image001

别忘了现在是多核时代,四核,超线程的i7. 单个线程最多只能占到12.5%的CPU利用率。

忘记这个简单的CPU利用率吧,多核时代,你需要具体知道到每个线程的利用率。

这篇博客,来源一个刚刚遇到的问题。

背景是我们正在针对Windows Media Player开发一些东西,具体是什么不重要。

我们遇到了两个不同策略需要做抉择,到底是哪一个好呢?

如果使用任务管理器来看,处理同样的任务,两个策略的CPU使用率都差不多在35%上下,没有太大的区别。(实验的平台是个双核超线程CPU)

但是如果使用更加高级的工具: Windows Performance Analysis Tools, 就能得到更多的信息。

策略A的结果:

clip_image002

在这里可以看到,wmplayer.exe的CPU使用率总共是33.62%, 但是其中有个线程3536的使用率占到了24.34%. 对于双核超线程而言,单线程最大占到25%. 所以线程3536完全成为了系统的瓶颈,即使还有更多的CPU资源,Windows Media Player都不可能跑的更快了。

策略B的结果:

clip_image003

可以看到,wmplayer.exe的CPU使用率为38.66, 还要略高于策略A.

但是,最高的单线程CPU使用率是13.46%,整个CPU的负载被平衡到了不同的线程中。整个系统中没有明显的瓶颈出现了。

孰优孰劣呢?

毫无疑问,策略B更好,Windows Media Player有能力处理规模更大的问题。

至于Windows Performance Analysis Tool怎么用,我就不多说了。外事不决问Google.

 

最后,惯例。

话说贼不走空,对于那些不喜欢这篇博客,又误入的同学,至少下面的福利你会喜欢。

作者: 嗷嗷 发表于 2011-08-26 17:03 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"