有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

任务调度算法的java帮助

我正在开发一个应用程序,其中关联了数千个任务 有数百台设备,每项任务都需要<;5毫秒开始执行,以及 平均需要100毫秒才能完成

条件如下:

  1. 每个设备只能处理一个 一次执行一个任务,例如,一个任务必须在其分配的任务上完成运行 处理后续任务之前的设备
  2. 调度程序应该是高效的。当前,正在处理给定设备的 工作队列所花费的时间超过其任务的总和

以下是当前实施的基本说明:

每个设备都包含一个工作队列,该队列中充满了与设备关联的任务 那个装置

当任务排队时,该设备的工作队列将放入 全局运行队列(队列的队列)。全局运行队列由工作线程使用 哪个是设备的任务对象,处理一个,然后放置 全局运行队列后面的设备队列。当给定的设备 再次退出队列后,工作线程将检查任务是否已完成, 如果是,则执行下一个任务。此过程将继续,直到所有设备队列 已耗尽全局运行队列中的任务

有改进的建议吗?我说得清楚了吗?如果没有,请让我知道,我会尽力澄清

谢谢你花时间看这个。问候


共 (2) 个答案

  1. # 1 楼答案

    ExecutorCompletionServiceThreadPoolExecutor这样的东西怎么样。这为您提供了完成时的回调,您可以使用它提交后续作业,以及一个受管理的执行器线程池,您可以对其进行调整以提高吞吐量

    我建议您通过探查器运行代码,以查看当前正在阻止哪些线程(听起来像是您的生产者设备线程)。我可以推荐YourKit Java Profiler,但它不是免费的

  2. # 2 楼答案

    您的设计存在的问题是,一次只运行一个任务,这意味着任何设备在使用时都处于空闲状态

    由于有数百个设备,为每个设备分配一个线程可能不是一个好主意,但是可以很好地使用线程池