玩转双核CPU:左手画圆,右手画方
2010-09-30 22:43:19 来源:WEB开发网将这段代码直接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毫秒一个平均值节点,曲线的平滑度足够了。
更多精彩
赞助商链接