【问题标题】:How to implement fairness in Task Executor consuming tasks from Blocking queue如何在任务执行器中使用阻塞队列中的任务实现公平性
【发布时间】:2018-11-25 13:04:36
【问题描述】:

我想实现一个消费者服务,它正在处理队列中的任务。我使用执行器服务实现的消费者服务/任务运行器。

但是,我需要处理的一些任务比其他任务花费的时间更长,我想在任务运行器中实现某种类型的公平性。当我调用/调度消费者时,我会知道队列中当前要执行的任务数。

我想知道实现这一目标的最佳方法是什么?

每个任务都有特定的类型和大概的执行时间。

【问题讨论】:

  • 定义“公平”。
  • 一类任务不应占用所有资源,因为有些任务的执行时间比其他任务长

标签: java producer-consumer


【解决方案1】:

您可以通过试验任务优先级来调整资源使用情况,也可以强制运行时间较长的任务定期休眠,强制它们允许其他任务执行。

【讨论】:

  • 是的,优先队列可以解决这个问题。我的问题是我的服务订阅了队列中每个用户的外部服务发布任务。为了实现优先级调度,我需要将任务从订阅队列中弹出,放入优先级队列,然后提交给执行器服务......引入另一个队列对我来说似乎不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2012-01-16
相关资源
最近更新 更多