使用基于事件的计时器与轮询的性能注意事项

时间:2013-07-29 17:08:26

标签: java performance timer polling

使用轮询系统或基于事件的计时器,什么是更快和更好的练习?

我目前正与更高级的同事就如何实施某些关键任务逻辑进行讨论。情况如下:

  • 收到给出执行时间的消息。
  • 当达到执行时间时,必须执行一些逻辑。
  • 现在可以接收多条消息,给出不同的执行时间,每次都必须执行逻辑。

我认为实现逻辑的最佳方法是创建一个定时器,当消息中的消息时会触发逻辑,但我的同事认为我最好不要轮询消息列表查看是否已达到执行时间。

他的论点是,投票系统更安全,因为它不那么复杂,因此不太可能被程序员搞砸。我的论点是,通过我的方式实现它,我们减少了计算负荷的减少,因此当我们真正想要它执行时更有可能执行逻辑。我该如何实施呢?为什么?


请求的信息

  • 我唯一一次使用我的逻辑几乎肯定是在负载最高的时候。
  • 要求没有说明连接的可靠性,但我与之交谈的每个人都表示他们从未听说过被删除的消息
  • 调度基于绝对系统。因此,消息将具有指定何时应执行算法的执行时间。由于存在时间同步,我已被指示假设所有机器的时间均匀。
  • 执行的算法使用一些最初是易失性但很快稳定的输入。通过推迟处理,我希望使用最稳定的信息。

1 个答案:

答案 0 :(得分:1)

java.util.Timer有效地完成了你的同事的建议(事实上,最后,实际上并没有那么多方法)。

它维护一个TimerTasks集合,并等待它上面的新活动,或者直到执行下一个任务为止。它不会轮询集合,它“知道”下一个任务将在N秒内触发,并等待直到发生这种情况或其他任何事情(例如添加或删除TimerTask)。这总体上比投票更好,因为它大部分时间都在睡觉。

所以,最后,你们都是对的 - 你应该使用一个计时器,因为它基本上是你的同事想要做的事情。