gpt4 book ai didi

Java-高效的调度结构?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:15 25 4
gpt4 key购买 nike

对于这个问题的长度,我深表歉意,但我认为包含足够的细节很重要,因为我正在寻找一种合适的方法来解决我的问题,而不是简单的代码建议!


一般说明:

我正在从事一个项目,该项目要求任务能够按某个相对重复 的时间间隔进行“安排”。

这些间隔以某个内部时间表示,表示为一个整数,该整数会随着程序的执行而递增(因此不等于实时)。每次发生这种情况时,都会询问调度以检查是否有任何任务在此时间步执行。

如果执行了任务,则应重新安排它在相对于当前时间的位置再次运行(例如,在 5 个时间步中)。这个相对位置简单地存储为 Task 对象的整数属性。

问题:

我在决定我应该如何构建它时有些挣扎 - 部分原因是它是一组有点难查找的搜索词。

就目前而言,我认为每次计时器递增时我都需要:

  1. 在计划中的“0”位置执行任务
  2. 将这些任务重新添加到计划中的相对位置(例如,每 5 步重复一次的任务将返回到位置 5)
  3. 日程表中的每组任务都会将“执行前的时间”减一(例如,位置 1 的任务将移动到位置 0)

假设:

有几个假设可能会限制我可以使用的可能解决方案:

  • 间隔必须是相对的,而不是特定的时间,并且被定义为从当前时间开始的整数步数
  • 这些间隔可以采用任何整数值,例如不受限制
  • 多个任务可以安排在同一时间步,但它们的执行顺序并不重要
  • 所有执行都应保持在单线程中 - 由于其他限制,多线程解决方案是合适的

我的主要问题是:

我如何设计此时间表以高效工作?哪些数据类型/集合可能有用?

我应该考虑另一种结构/方法吗?

我拒绝调度框架(例如 Quartz)是否错误,因为它似乎在“实时”时域而不是“非实时”时域中工作得更多?


非常感谢您提供的任何可能的帮助。如果需要,请随时发表评论以获取更多信息,我会在需要的地方进行编辑!

最佳答案

嗯,Quartz 是非常强大的工具,但是它的配置可能性有限,所以如果您需要特定的功能,您应该适本地编写自己的解决方案。

但是,研究Quartz 源代码和数据结构是个好主意,因为它们已经成功地处理了很多您会发现f.g. 的问题。数据库级别的进程间同步,运行延迟任务等。

我曾经编写过自己的调度程序,它适用于 Quartz 可能不容易适应的任务,但是一旦我学习了 Quartz,我就明白我的解决方案可以改进多少,知道它是如何改进的在 Quartz 中完成。

关于Java-高效的调度结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362921/

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