事件驱动编程和替代方案中的主循环



我所知,事件驱动的程序需要一个主循环,例如

while (1) {
} 

我只是好奇这个 while 循环是否会花费高 CPU 使用率?有没有其他方法可以在不使用主循环的情况下实现事件驱动的程序?

你的例子具有误导性。通常,事件循环如下所示:

Event e;
while ((e = get_next_event()) != E_QUIT)
{
    handle(e);
}

关键的一点是,对我们虚构的get_next_event()泵送函数的函数调用将是慷慨的,并鼓励上下文切换或任何适用于您的平台的调度语义,如果没有事件,该函数可能会允许整个过程休眠,直到事件到达。

因此,在实践中,没有什么可担心的,不,如果您想在程序运行时处理无限量的信息,那么除了无界循环之外,没有任何替代方案。

通常,像这样的循环的问题在于,当它做一件工作时,它不能做任何其他事情(例如,Windows SDK的旧"合作"多任务处理)。下一个天真的跳跃通常是为每件作品生成一个线程,但这是非常危险的。大多数人最终会得到一个通常内部有一个线程池的执行器。然后,句柄调用实际上只是将工作排队,下一个可用线程将其取消排队并执行它。并发线程数保持固定为池中工作线程的总数,当线程没有任何关系时,它们不会占用 CPU。

相关内容

  • 没有找到相关文章

最新更新