时间驱动的事件架构
Time driven events architecture
我正在研究时间驱动的事件,但我似乎无法弄清楚如何在不不断使用过量 CPU 的情况下完成此操作。
array events;
events[1] = [id:1,time:1440589943,event:happend];
While(running)
{
loop over events
if(currentTime >= eventTime)
fireEvent()
}
这似乎是我能想出的最基本的事件处理程序,但我认为它会不断地消耗大量 CPU 而没有真正做任何事情。
所以问题基本上是:其他任何语言中的时间驱动事件如何处理时间驱动事件?他们是否经常检查一个人是否准备好被解雇?他们使用聪明的调度机制吗?
提前致谢。
处理调度机制的常用方法是将时间事件放在 priority queue which is typically implemented as a heap 上。这使您可以知道下一个事件何时到来并睡适当的时间。这样您就不会一直寻找下一个事件,并且处理器可以执行其他有意义的工作,直到将控制权传回以处理下一个预定事件。
只要注册了一个新事件,它就会被推到优先级队列中。优先级队列负责维护事件的顺序,并可以存储任何重复事件的重复调度信息。通过这种方式,一个事件可以被处理,然后根据它的调度行为在未来的时间添加回队列。
典型unix/linux系统的cron设计遵循这个原则。 cron 上的维基百科文章包含对其实现的简短概述。
我正在研究时间驱动的事件,但我似乎无法弄清楚如何在不不断使用过量 CPU 的情况下完成此操作。
array events;
events[1] = [id:1,time:1440589943,event:happend];
While(running)
{
loop over events
if(currentTime >= eventTime)
fireEvent()
}
这似乎是我能想出的最基本的事件处理程序,但我认为它会不断地消耗大量 CPU 而没有真正做任何事情。
所以问题基本上是:其他任何语言中的时间驱动事件如何处理时间驱动事件?他们是否经常检查一个人是否准备好被解雇?他们使用聪明的调度机制吗?
提前致谢。
处理调度机制的常用方法是将时间事件放在 priority queue which is typically implemented as a heap 上。这使您可以知道下一个事件何时到来并睡适当的时间。这样您就不会一直寻找下一个事件,并且处理器可以执行其他有意义的工作,直到将控制权传回以处理下一个预定事件。
只要注册了一个新事件,它就会被推到优先级队列中。优先级队列负责维护事件的顺序,并可以存储任何重复事件的重复调度信息。通过这种方式,一个事件可以被处理,然后根据它的调度行为在未来的时间添加回队列。
典型unix/linux系统的cron设计遵循这个原则。 cron 上的维基百科文章包含对其实现的简短概述。