WEB开发网
开发学院软件开发C语言 玩转双核CPU:左手画圆,右手画方 阅读

玩转双核CPU:左手画圆,右手画方

 2010-09-30 22:43:19 来源:WEB开发网   
核心提示: 将这段代码直接F5, 运行结果如下:果然,玩转双核CPU:左手画圆,右手画方(2),与大家意料的一样,两个CPU中都会显示出非常扭曲、不规则的正弦曲线,由于CPU占用率曲线是1秒钟更新一次的,程序使用的每100毫秒一个平均值节点, 按照书中的说法,C++程序可以使用WinAPI里的SetThre

将这段代码直接F5, 运行结果如下:

果然,与大家意料的一样,两个CPU中都会显示出非常扭曲、不规则的正弦曲线。

按照书中的说法,C++程序可以使用WinAPI里的SetThreadAffinityMast()函数,将程序固定到某个特定的CPU上执行。

查了下MSDN,当然,在.NET里,也有Manage的相似代码。见http://msdn.microsoft.com/zh-tw/library/system.diagnostics.process.processoraffinity(VS.80).aspx

按照MSDN,在代码中加入了简单的两句:

   System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();       
     p.ProcessorAffinity = (IntPtr)0x0001;

然后再次F5, CPU中的曲线如下图所示:

1号CPU成规则的正弦曲线相当完美,2号CPU使用率一直为0.

看来这就是书中想让大家达到的效果了。

这个效果让人感觉非常枯燥乏味。2号CPU的资源就浪费掉了,有没有办法将它利用起来呢?

让我们来分析这两句代码:

while ((Environment.TickCount - startTime) <= busySpan[j]) ;

System.Threading.Thread.Sleep((int)idleSpan[j]);

它的意思是,在规定好的时间间隔内(程序中规定了是100毫秒),满负载运行(通过空循环)构成正弦函数需要运行的时间(由之前的计算得到),其余时间就睡觉。如运行69毫秒,睡觉31毫秒,那么在这100毫秒的时间段,CPU的平均占用率就是69%。由于CPU占用率曲线是1秒钟更新一次的,程序使用的每100毫秒一个平均值节点,曲线的平滑度足够了。

Tags:CPU 左手 右手

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接