代码改变世界

阻止 vs. 轮询

2011-03-16 17:25  Dirichlet  阅读(384)  评论(0编辑  收藏  举报

阻止 vs. 轮询
 
线程可以等待某个确定的条件来明确轮询使用一个轮询的方式,比如:
 while
 (!proceed);
或者:
 while
 (DateTime
.Now < nextStartTime);
这是非常浪费CPU时间的:对于CLR和操作系统而言,线程进行了一个重要的计算,所以分配了相应的资源!在这种状态下的轮询线程不算是阻止,不像 一个线程等待一个EventWaitHandle(一般使用这样的信号任务来构建)。
 
阻止和轮询组合使用可以产生一些变换:
 while
 (!proceed) Thread
.Sleep (x);    // "轮询休眠!"
 
x 越大,CPU效率越高,折中方案是增大潜伏时间,任何20ms的花费是微不足道的,除非循环中的条件是极其复杂的。
 
除了稍有延迟,这种轮询和休眠的方式可以结合的非常好。(但有并发问题,在第四部分讨论)可能它最大的用处在于程序员可以放弃使用复杂的信号结构 来工作了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuanhuiqiao/archive/2010/06/17/5676212.aspx