什么是繁忙的循环?

use*_*364 2 c++

它可以是带或不带语句的循环吗?

while (1)
{
   //Empty
}
Run Code Online (Sandbox Code Playgroud)

要么

int i = 0;

while (1)
{
   i++;
}
Run Code Online (Sandbox Code Playgroud)

T.R*_*Rob 13

"忙循环"或更常见的"忙等待"是活动轮询,其中应用程序正在等待某个事件发生并持续检查它.通常,这包括定时睡眠或其他任务,它放弃CPU时间,以便另一个进程可以提供预期的输入.

将此与回调进行对比.在等待回调时,程序不会消耗CPU周期.通常,程序将"注册"某个监视应用程序根据某个事件调用的回调例程.

区别在于忙循环中的程序在等待时消耗CPU和时间片,而回调机制允许程序在等待时不消耗(或几乎没有)CPU.

  • 我明白你在摘要中所说的内容。我只是对如何从具体到硬件实现这一点感到困惑。某些东西必须仍在轮询,因为从根本上来说,要对某些东西做出反应,它必须检查是否发生了其他事情,对吗? (3认同)
  • 但是实现回调机制的程序是否仍然需要运行一个忙循环才能知道什么时候点击回调?这如何更有效率? (2认同)

dic*_*oce 5

对我来说,繁忙的循环是一个永远不会阻塞的循环。

阻塞是操作系统提供的一种行为,它允许线程消耗任何 cpu 周期,直到满足某些条件(条件变量发出信号,或者可能只是数据到达套接字(因为 recv() 将阻塞))。

在传统的 Win32 主循环中,每次线程调用 GetMessage() 时,您都可能会阻塞。所有事件驱动的窗口系统都是类似的。