【问题标题】:How to manage quality of service in processing task?如何管理处理任务中的服务质量?
【发布时间】:2012-06-29 22:08:58
【问题描述】:

我正在实施一项用于任务处理的服务,我想管理服务质量,并为某些类型的任务提供更高的优先级。有四种类型的任务,因此我将使用四个队列,每种类型的任务一个。

  • 创建四个处理线程(每个队列一个)并为其分配不同的优先级是否方便?
  • 还是应该让处理线程主要处理优先级较高的队列?
  • 还有其他方法吗?

【问题讨论】:

  • 这种事情真的没有通用的答案。太多取决于您将在哪种硬件上运行它(例如多少个处理器/内核)以及每个任务的可并行化程度。
  • 任务是相互独立的(即使是相同类型的任务)。使用优先级我应该简单地确保在某个时间间隔内,处理的任务数量(某种类型)与其优先级成正比(假设队列中有相同数量的任务)。

标签: c# .net algorithm queue


【解决方案1】:

我建议使用一个线程来负责抓取任务。

有很多很多可能的策略。一种是简单地拥有 4 个队列,并尝试在它们之间循环。另一种是将任务放入优先级队列(通常使用堆数据结构实现),但如果这样做,请注意所有较高优先级的任务将在任何较低优先级的任务之前执行。第三种是使用基于年龄的优先级队列,这样您就可以先处理最旧的请求 - 然后人为地使高优先级请求变老。 (我可以建议队列中最古老事物的年龄加上一个常数。)

要记住的一般要点。如果您分配了足够的容量,您的队列可能会保持相当短。如果您的容量不足,那么队列将无限增长,从长远来看,您可以将排队问题视为分类问题而不是优先级问题。但如果可能的话,尝试增加容量而不是巧妙地确定优先级通常会很有效。

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多