gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:18:03 25 4
gpt4 key购买 nike

使用轮询系统或基于事件的计时器,什么是更快且“更好的实践”?

我目前正在与一位更资深的同事讨论如何实现一些关键任务逻辑。情况如下:

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

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

他的论点是,轮询系统更安全,因为它不太复杂,因此不太可能被程序员搞砸。我的观点是,通过以我的方式实现它,我们可以减少计算负载,因此更有可能在我们真正希望执行时执行逻辑。我应该如何实现它以及为什么?

<小时/>

请求的信息

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

最佳答案

java.util.Timer 有效地执行了您同事的建议(说实话,最终,确实没有那么多方法可以做到这一点)。

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

所以,最后,你们都是对的——您应该为此使用计时器,因为它基本上可以完成您同事想做的事情。

关于java - 使用基于事件的计时器与轮询的性能注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com