帮助完成任务调度算法

时间:2010-09-02 05:53:35

标签: java priority-queue job-scheduling

我正在开发一个应用程序,其中涉及数千个任务 具有数百个设备,每个任务需要,< 5ms开始执行,和 平均需要100毫秒才能完成。

条件如下:

  1. 每个设备只能处理一个 一次任务,例如,一个任务必须在其指定的任务上完成运行 在后续任务被处理之前的设备。
  2. 调度程序应该是高效的。目前,处理给定设备的 工作队列需要的时间超过其任务总和。
  3. 以下是当前实施的基本描述:

    每个设备都包含一个工作队列,其中填充了与之关联的任务 那个设备。

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

    有任何改进建议吗?我清楚地说过了吗?如果没有,请告诉我,我会尽力澄清。

    感谢您花时间看一下。问候。

2 个答案:

答案 0 :(得分:1)

ExecutorCompletionServiceThreadPoolExecutor等内容如何。这使您可以在完成时回调,您可以使用它来提交后续作业,以及执行器的托管线程池,您可以调整它以提高吞吐量。

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

答案 1 :(得分:0)

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

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