为什么while循环用于非死亡过程?

时间:2010-11-03 10:25:08

标签: operating-system while-loop

对于不应该死的应用程序,应该实现while循环,afaik。 喜欢

while(){
  key = getKeyPress();
  if(key)
    processKey(key);

}

当我使用“top”时,我可以看到200个程序挂起。这意味着有200个while循环!

我希望每个程序都将事件挂钩到操作系统。当这些事件发生时,操作系统调用这些程序钩子。

Web程序在初始化时执行javascript代码。然后我们勾选一个按钮,如果点击($('按钮')。点击(myClickJs)),我们挂钩定时器(setInterval)等。我们不使用循环来等待页面上的整个事件。这种方法节省了大量的CPU时间和资源。

为什么没有这种方法?

1 个答案:

答案 0 :(得分:0)

对于“不应该死的应用程序”,必须在某处实现循环。你无法解决这个问题。

在您的示例代码中,它正在等待按下某个键,然后执行响应该按键操作所需的操作。检测并处理了按键后,如何将其重置以等待另一次按键(或其他类型的输入)?答案当然是使用一个循环(正如你所做的那样)。

这个“外部”循环不以任何方式反映例程'getKeyPress()'内部的内容。这个例程可能有两种运行模式 - 轮询和阻塞。

如果这是一个轮询例程,您的示例代码将有效地忙 - 等到按下某个键。众所周知,这是对处理器的低效使用(尽管对于某些问题,它是正确的解决方案)。

如果这是阻塞例程,则线程/任务将阻塞,直到按下键为止。在被阻止时,该线程/任务将不会消耗任何处理器周期,这将允许它们被另一个线程/任务/进程使用。出于此响应的目的,有关如何实现此阻塞调用的具体详细信息无关紧要。重要的概念是线程/任务可能会阻塞。

没有“外部”循环,无论你是否有钩子,你只会在检测和处理任何按键时获得一次通过。

希望这有帮助。