c# - 如何管理处理任务中的服务质量?

标签 c# .net algorithm queue

我正在实现一项任务处理服务,我想管理服务质量,为某些类型的任务赋予更高的优先级。有四种类型的任务,因此我会使用四个队列,每种任务一个。

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

最佳答案

我建议有一个线程负责抓取任务。

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

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

关于c# - 如何管理处理任务中的服务质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269576/

相关文章:

c# - 关于字符串实习和替代方案

algorithm - 有效地在字符串中找到给定的子序列,最大化连续字符的数量

c# - 如何保持 SqlConnection 始终打开

c# - "The parameters dictionary contains a null entry for parameter ' blueColor ' of non-nullable type ' System.Boolean '"- 如何解决这个问题?

.net - 如何使用 C# 正则表达式对象进行此替换?

c# - 复杂对象的 XML 反序列化

c++ - 计算最大利润的代码

algorithm - 易于移位的线段树

c# - 使用 C# 将 PDF 文件转换为图像

c# - 在 C# 中调用具有多个参数的表达式时出现 NullReferenceException