优先处理不同类型的消息
Prioritizing different types of messages
我有 t
种不同的消息类型,它们可以在不同的时间到达队列 q
。到达的消息数
在特定时间可能会有所不同。每种类型都有一些优先级。
我需要编写一个算法,按照以下规则在优先级队列中对这些消息进行排序:
- 组织消息,使 t 的更高优先级成为队列中的第一条消息。
- 除了优先级之外,我们还需要考虑到较低优先级的消息仍然需要以一定百分比出现在队列中(例如,每第 10 条消息将是优先级为 2 的消息,每第 100 条消息将是优先级 3 等)。
- 如果队列头部已经有优先级较低的消息,则优先级较高的消息应排在到达消息之前
- 如果队列头部已经有优先级较低的消息,并且我们没有收到更高优先级的消息。消息 - 从队列中获取时,我们首先获取优先级较低的消息
示例 1:
- t1 - 优先级 1(8 个中出现 5 个)
- t2 - 优先级 2(8 个中出现 2 个)
- t3 - 优先级 3(8 个中出现 1 个)
此队列的可能状态(前 8 条消息)
q = t1,t1,t2,t1,t1,t2,t1,t3
示例 2:
5 t2
条消息到达空队列后我有:
q = t2,t2,t2,t2,t2
现在如果有 10 t1
条消息到达,我需要进行以下分配:
q = t1,t1,t2,t1,t1,t2,t1,t1,t2,t1,t1,t2,t1,t1,t2
是否已经有实现此功能的算法?
我的想法是为每个优先级保留三个不同的队列。维护每个队列中的消息数。
令ratio1 = c1 / (c1 + c2 + c3)。在您的示例中,c1、c2、c3 分别为 5、2、1。
从第一个队列中选取 (n1 * ratio1) 条消息,然后从第二个队列中选取 (n2 * ratio2) 条消息,依此类推。 n1、n2、n3 分别是队列 1、2、3 中当前的消息数。
我解释了我的总体思路。您可以将其扩展到任意数量的队列。
我想到将上述方案命名为基于优先级的轮循算法。我搜索了这个名字,我也搜索了 found a relevant article 。希望对你有帮助。
我有 t
种不同的消息类型,它们可以在不同的时间到达队列 q
。到达的消息数
在特定时间可能会有所不同。每种类型都有一些优先级。
我需要编写一个算法,按照以下规则在优先级队列中对这些消息进行排序:
- 组织消息,使 t 的更高优先级成为队列中的第一条消息。
- 除了优先级之外,我们还需要考虑到较低优先级的消息仍然需要以一定百分比出现在队列中(例如,每第 10 条消息将是优先级为 2 的消息,每第 100 条消息将是优先级 3 等)。
- 如果队列头部已经有优先级较低的消息,则优先级较高的消息应排在到达消息之前
- 如果队列头部已经有优先级较低的消息,并且我们没有收到更高优先级的消息。消息 - 从队列中获取时,我们首先获取优先级较低的消息
示例 1:
- t1 - 优先级 1(8 个中出现 5 个)
- t2 - 优先级 2(8 个中出现 2 个)
- t3 - 优先级 3(8 个中出现 1 个)
此队列的可能状态(前 8 条消息)
q = t1,t1,t2,t1,t1,t2,t1,t3
示例 2:
5 t2
条消息到达空队列后我有:
q = t2,t2,t2,t2,t2
现在如果有 10 t1
条消息到达,我需要进行以下分配:
q = t1,t1,t2,t1,t1,t2,t1,t1,t2,t1,t1,t2,t1,t1,t2
是否已经有实现此功能的算法?
我的想法是为每个优先级保留三个不同的队列。维护每个队列中的消息数。
令ratio1 = c1 / (c1 + c2 + c3)。在您的示例中,c1、c2、c3 分别为 5、2、1。
从第一个队列中选取 (n1 * ratio1) 条消息,然后从第二个队列中选取 (n2 * ratio2) 条消息,依此类推。 n1、n2、n3 分别是队列 1、2、3 中当前的消息数。
我解释了我的总体思路。您可以将其扩展到任意数量的队列。
我想到将上述方案命名为基于优先级的轮循算法。我搜索了这个名字,我也搜索了 found a relevant article 。希望对你有帮助。