1

我正在研究时间驱动的事件,我似乎无法弄清楚如何在不经常使用过多 CPU 的情况下做到这一点。

array events;
events[1] = [id:1,time:1440589943,event:happend];
While(running)
{
    loop over events
        if(currentTime >= eventTime)
             fireEvent()
}

这似乎是我能想到的最基本的事件处理程序,但我认为它会不断消耗大量 CPU 而没有真正做任何事情。

所以问题基本上是:其他任何语言的时间驱动事件如何处理时间驱动事件?他们是否经常检查一个人是否准备好被解雇?他们是否使用巧妙的调度机制?

提前致谢。

4

1 回答 1

1

处理调度机制的常用方法是将时间事件放在优先级队列上,该队列 通常实现为。这使您可以知道下一个事件何时到来并睡适当的时间。这样,您就不会一直在寻找下一个事件,并且处理器可以执行其他有意义的工作,直到将控制权传回以处理下一个预定事件。

每当注册一个新事件时,它就会被推送到优先级队列中。优先级队列负责维护事件的顺序,并且可以存储任何重复事件的重复调度信息。通过这种方式,可以处理事件,然后根据其调度行为在将来将其添加回队列。

典型的 unix/linux 系统上的 cron 设计遵循这个原则。关于cron的 Wikipedia 文章包含对其实现的简短概述。

于 2015-08-27T00:43:29.387 回答