从维基百科的文章投票
轮询,或轮询操作中,在计算机科学中,指的是由一个客户机程序作为同步活动积极采样的外部设备的状态。 轮询是最经常在输入/输出(I / O)的术语使用,并且也被称为轮询I / O或软件驱动的I / O。
轮询有时与忙等待轮询(忙等待)同义使用。 在这种情况下,当需要电脑的I / O操作不执行任何操作以外检查I / O设备的状态,直到它准备好,此时该设备访问。 换句话说,计算机等待,直到该装置已准备就绪。
轮询也指的是设备,反复确认准备就绪的情况下,如果它不是计算机将返回不同的任务。 虽然不如浪费CPU周期为忙等,这通常不是作为替代轮询一样高效,中断驱动的I / O。
所以,当一个线程不使用“条件变量”,将它称为“轮询”的数据改变或“忙等待”?
两者之间的区别是应用程序做民意调查之间有什么。
如果一个程序轮询的设备说,每一秒,和做别的事情的平均时间,如果没有可用数据(包括可能只是在睡觉,留下供他人的CPU),它的投票。
如果程序不断轮询没有做的支票之间的任何设备(或资源或其他),这就是所谓的忙等待。
这是没有直接关系的同步。 该条件变量块(当设备或资源是可用的应信号)一种程序,是既不轮询也不忙等待。 这更像是事件驱动/中断驱动的I / O。
(但是,例如,围绕一个环的螺纹try_lock
是轮询的一种形式,并且可能忙等待如果回路是紧的。)
假设一个具有假设当它注意到一个按钮被按下以执行某些动作的微处理器或微控制器。
第一种方法是让程序进入一个循环什么也不做,除了看看是否按钮还没有改变,一旦有,执行所需的操作。
在某些情况下的第二个方法是将硬件编程当按钮被按下以触发一个中断,假设按钮连接到该真实有线因此它可以引起中断的输入。
第三种方法是配置一个定时器中断处理器以某一速率(比方说,1000X /秒),并有处理程序对于中断后,它检查按钮的状态和行为。
第一种方法使用一个忙等待。 它可以提供很好的响应时间,一个特定的刺激,在完全调整了一切费用。 第二种方法使用事件触发中断。 它往往会提供的响应时间比忙等待稍微慢一些,但将允许CPU做其他的事情在等待I / O。 它也可以让CPU进入低功耗睡眠模式,直到按钮被按下。 第三种方法将提供的响应时间是远远不如其他两个,但会使用即使硬件不允许中断通过按下按钮来触发。
在需要快速响应的情况下,它会经常需要使用一个事件触发的中断或忙等待。 在许多情况下,然而,调查方法可能是最实用的。 硬件可能不存在,以支持一个可能感兴趣的所有事件,或者一个有兴趣可以大大超过可用的中断次数事件的数量。 此外,可能希望对某些条件以生成延迟的响应。 例如,假设一个人希望计数的次数开关被激活时,必须符合以下标准的数量:
- 每合法开关事件将包括从0至900us(微秒)的时间间隔,在此期间,开关可以任意地关闭并重新打开,然后在此期间,开关将保持闭合至少1.1ms的间隔,接着的时间间隔从0到900us在此期间,开关可以任意地打开和再闭合,随后的时间间隔,其中至少1.1ms期间,开关将被打开。
- 软件必须在任何非忽略开关打开或关闭后忽略950us开关的状态。
- 软件允许任意地计数或忽略其发生上述需要消隐间隔之外开关事件,但其持续超过1.1ms以下。
- 该软件的报告数量必须是开关是稳定的“封闭”的时间1.99ms内有效。
执行这一要求的最简单的方法是观察开关1000倍/秒的状态; 如果它被认为是“封闭”的时候,以前的状态是“开放”,增加计数器。 非常简单和容易; 即使开关打开,一个真实的事件之前和之后的900us期间关闭所有古灵精怪的方式,软件不会在意。
这将有可能使用一个开关输入触发沿的中断与定时器以产生到开关输入更快的响应,同时满足所要求的消隐要求。 最初,输入将被武装下一次开关闭合来触发。 一旦中断被触发,软件将禁用,但设置一个计时器,950us后触发中断。 一旦计时器到期,这将触发这将手臂中断在下一次开关“打开”火中断。 这中断反过来会禁用开关中断,并重新设置定时器950us,所以定时器中断将重新启用开关中断。 有时,这种方法可能是有用的,但软件是很多比简单的轮询方法更复杂。 当基于定时器的方法将是足够的,它往往是优选的。
在使用多任务操作系统,而不是直接中断系统,许多相同的原则也适用。 周期性I / O轮询会浪费一些CPU时间与具有直至特定事件发生时OS将不运行的代码进行比较,但在许多情况下,当没有事件出现时使用将是可接受的两个事件的响应时间和时间的浪费量定期轮询。 事实上,在一些I / O缓冲的情况下,定期轮询可能会被证明是非常有效的。 例如,假定一个由远程计算机通过串行端口接收大量的数据,至多11520个字节将每秒到达,则设备将发送到前面的最后确认的数据包的数据的2K,和串行端口具有一个4K输入缓冲器。 虽然人们可以使用“接收到的数据”事件处理数据,很可能只是为有效简单地检查收到了端口100X /秒,过程中的所有数据包到这一点。 这样的轮询将是浪费时间当远程设备被不发送数据,但是,如果输入的数据,预计其可以尽快更有效处理它在大约1.15K比每小片的输入数据的处理块它的用武之地。