我正在开发一个应用程序,在这个应用程序中,与数百个设备相关联的数千个任务,每个任务都需要< 5ms才能开始执行,平均需要100 5ms才能完成。
这些条件如下:
以下是当前实现的基本说明:
每个设备都包含一个工作队列,其中包含与该设备关联的任务。
当任务排队时,该设备的工作队列被放置到全局运行队列(队列队列)中。全局运行队列是由一个工作线程使用的,它是设备的任务对象,它处理一个任务对象,然后将设备队列放在全局运行队列的后面。当给定的设备再次退出队列时,工作线程将检查任务是否已完成,如果已完成,则执行下一个任务。此过程将继续进行,直到所有设备队列都已耗尽全局运行队列中的任务。
有什么改进的建议吗?我说得清楚了吗?如果没有,请告诉我,我会尽力澄清的。
谢谢你抽出时间来看这个。致以问候。
发布于 2010-09-02 08:40:22
像ExecutorCompletionService和ThreadPoolExecutor这样的东西怎么样?这给您在完成时回调(可以用来提交后续作业)和托管的执行器线程池,您可以对这些线程池进行调整以提高吞吐量。
我建议您通过分析器运行代码,查看哪些线程当前处于阻塞状态(听起来它将是您的生产者设备线程)。我可以推荐YourKit Java Profiler,但是它不是免费的。
发布于 2010-09-02 08:46:59
设计的问题是一次只运行一个任务,这意味着任何设备在使用时都处于空闲状态。
由于有数百个设备,给每个设备分配一个线程可能不是一个好主意,但是可以很好地使用线程池。
https://stackoverflow.com/questions/3624160
复制相似问题