Operating system 为什么while循环用于非染色过程?

Operating system 为什么while循环用于非染色过程?,operating-system,while-loop,Operating System,While Loop,对于不应该消亡的应用程序,应该实现while循环,afaik。 像 当我使用“top”时,可以看到200个程序挂起。这意味着有200个while循环 我希望每个程序都能将事件挂钩到操作系统上。当这些事件发生时,操作系统调用程序的这些钩子 Web程序在初始化时执行javascript代码。然后,如果单击($('button'),我们就钩住一个按钮。单击(myClickJs)),我们钩住计时器(setInterval)等等。我们不使用循环来等待页面上的整个事件。这种方法节省了大量cpu时间和资源 为

对于不应该消亡的应用程序,应该实现while循环,afaik。 像

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

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

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

为什么没有这种方法?

对于“不应该消亡的应用程序”,必须在某个地方实现循环。你不能回避这个问题

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

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

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

如果这是一个阻塞例程,线程/任务将阻塞,直到按下某个键为止。阻塞时,此线程/任务不会占用任何处理器周期,这将允许其他线程/任务/进程使用这些处理器周期。就本响应而言,关于如何实现该阻塞调用的具体细节无关紧要。重要的概念是线程/任务可能会阻塞

如果没有“外部”循环,无论是否有挂钩,您都只能通过一次检测和处理任何按键


希望这能有所帮助。

我不明白你在问什么。为什么没有什么办法?我只是好奇而已。对于常规程序,需要鼠标事件、计时器、键、网络活动。所以阻塞不应该起作用。我认为cpu的速度更快。所以没有人关心。对于需要多个输入源的程序,阻塞调用可能仍然有效,但程序设计可能会改变。1.块等待任何输入。2.确定输入的类型。3.处理输入。4.循环回到“1”。对于等待输入时需要执行其他工作的程序,请使用另一个线程。此外,尽管CPU的速度确实比以前快,但您编写的应用程序通常不是系统上使用的唯一应用程序。当几个应用程序不必要地占用处理器时间时,就会影响用户的生产率和使用其他应用程序的体验。作为一名开发人员,我不能说哪个应用程序对用户来说更重要,我希望他们能有一种既实用又愉快的体验。
while(){
  key = getKeyPress();
  if(key)
    processKey(key);

}