我正在开发一个应用程序,其中涉及数千个任务 具有数百个设备,每个任务需要,< 5ms开始执行,和 平均需要100毫秒才能完成。
条件如下:
以下是当前实施的基本描述:
每个设备都包含一个工作队列,其中填充了与之关联的任务 那个设备。
当一个任务入队时,该设备的工作队列被放入一个 全局运行队列(队列队列)。全局运行队列由工作线程使用 将队列的任务对象取消,处理一个,然后放置 全局运行队列后面的设备队列。当那个给定的设备 已经再次出列,工作线程检查任务是否已完成, 如果是,则执行下一个任务。此过程继续,直到所有设备队列 已经耗尽了全球运行队列中的任务。
有任何改进建议吗?我清楚地说过了吗?如果没有,请告诉我,我会尽力澄清。
感谢您花时间看一下。问候。
答案 0 :(得分:1)
ExecutorCompletionService和ThreadPoolExecutor等内容如何。这使您可以在完成时回调,您可以使用它来提交后续作业,以及执行器的托管线程池,您可以调整它以提高吞吐量。
我建议您通过分析器运行代码以查看当前阻塞的线程(听起来它将是您的生产者设备线程)。我可以推荐YourKit Java Profiler,但不是免费的。
答案 1 :(得分:0)
您的设计存在的问题是,一次只能运行一个任务,这意味着任何设备在使用任何其他设备时都处于空闲状态。
由于有数百个设备,为每个设备分配一个线程可能不是一个好主意,但可以很好地使用线程池。