0
我正在执行任务处理服务,我想管理服务的质量,给予某些类型的任务更高的优先级。有四种类型的任务,因此我将使用四个队列,每个任务类型一个。如何管理处理任务中的服务质量?
- 为方便创建四个处理线程(每个队列一个)并为其分配不同的优先级?
- 或者我应该让处理线程主要关注高优先级的队列吗?
- 还有其他方法吗?
我正在执行任务处理服务,我想管理服务的质量,给予某些类型的任务更高的优先级。有四种类型的任务,因此我将使用四个队列,每个任务类型一个。如何管理处理任务中的服务质量?
我建议有一个负责抓取任务的单线程。
有很多很多可能的策略。一个只是有4个队列,并尝试在它们之间循环。另一种方法是将任务粘贴到优先级队列中(通常使用堆数据结构实现),但如果这样做,那么请注意,所有较高优先级的任务都将在任何较低优先级的任务之前执行。三分之一是使用基于年龄的优先级队列,因此您可以先取得最旧的请求 - 然后人为提出高优先级的请求。 (我可以建议队列中最古老的东西的年龄加上一个常数项。)
要牢记一点。如果您分配足够的容量,您的队列可能会保持相当短的时间。如果你的能力不足,那么队列将无限制地增长,并且从长远来看,你可以将排队问题视为分类而不是优先级。但是如果可能的话,它往往能够很好地提高容量,而不是在优先级方面很聪明。
这种事情真的没有普遍的答案。过多的问题取决于你将要运行的硬件类型(例如,多少个处理器/内核)以及这些任务如何并行化。 – DGH
这些任务是相互独立的(即使是那些相同类型的)。使用优先级,我应该确保在特定的时间间隔内,处理(特定类型的)任务的数量与其优先级成正比(假设队列中有相同数量的任务)。 – enzom83