C# 如何在处理任务时管理服务质量?

C# 如何在处理任务时管理服务质量?,c#,.net,algorithm,queue,C#,.net,Algorithm,Queue,我正在为任务处理实施一项服务,我希望管理服务质量,将更大的优先级放在某些类型的任务上。有四种类型的任务,因此我将使用四个队列,每种类型的任务一个队列 创建四个处理线程(每个队列一个)并为它们分配不同的优先级是否方便 或者我应该让处理线程主要负责更高优先级的队列 还有其他方法吗 我建议使用一个线程来负责抓取任务 有很多很多可能的策略。一种是简单地拥有4个队列,并尝试在它们之间循环。另一种方法是将任务放入优先级队列(通常使用堆数据结构实现),但如果这样做,那么请注意,所有优先级较高的任务都将在任何

我正在为任务处理实施一项服务,我希望管理服务质量,将更大的优先级放在某些类型的任务上。有四种类型的任务,因此我将使用四个队列,每种类型的任务一个队列

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

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

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


有一点需要记住。如果您分配了足够的容量,您的队列可能会保持合理的长度。如果您的容量不足,那么队列将毫无限制地增长,从长远来看,您可以将排队问题视为分类问题,而不是优先级问题。但如果可能的话,增加容量而不是巧妙地划分优先级通常效果很好。

对于这种事情,确实没有通用的答案。太多的问题取决于你将在什么样的硬件上运行(例如,有多少个处理器/内核)以及这些任务的并行性。这些任务彼此独立(即使是相同类型的任务)。使用优先级,我应该简单地确保在特定的时间间隔内,处理的任务数量(特定类型)与其优先级成正比(假设队列中的任务数量相同)。