首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >任务调度算法的帮助

任务调度算法的帮助
EN

Stack Overflow用户
提问于 2010-09-02 05:53:35
回答 2查看 938关注 0票数 1

我正在开发一个应用程序,在这个应用程序中,与数百个设备相关联的数千个任务,每个任务都需要< 5ms才能开始执行,平均需要100 5ms才能完成。

这些条件如下:

  1. 每个设备一次只能处理一个任务,例如,在后续任务被处理之前,一个任务必须在其指定的设备上完成运行。
  2. 调度程序应该是有效的。目前,处理给定设备的工作队列所需时间比其任务之和要长。

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

每个设备都包含一个工作队列,其中包含与该设备关联的任务。

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

有什么改进的建议吗?我说得清楚了吗?如果没有,请告诉我,我会尽力澄清的。

谢谢你抽出时间来看这个。致以问候。

EN

回答 2

Stack Overflow用户

发布于 2010-09-02 08:40:22

ExecutorCompletionServiceThreadPoolExecutor这样的东西怎么样?这给您在完成时回调(可以用来提交后续作业)和托管的执行器线程池,您可以对这些线程池进行调整以提高吞吐量。

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

票数 1
EN

Stack Overflow用户

发布于 2010-09-02 08:46:59

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3624160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档