【问题标题】:Time driven events architecture时间驱动的事件架构
【发布时间】:2015-11-20 05:51:13
【问题描述】:

我正在研究时间驱动的事件,但我似乎无法弄清楚如何在不经常使用过多 CPU 的情况下完成此操作。

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

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

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

提前致谢。

【问题讨论】:

    标签: events scheduler intervals event-driven event-driven-design


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 1970-01-01
      • 2011-06-17
      • 2018-11-18
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多