1

有序多线程消息处理的常用方法是什么?

考虑以下示例:我有一个将数字发送到队列中的发布者:1, 2, 3, 4, 5, 6, 7

我的目标是按顺序处理奇数和偶数。

我知道的一种可能的解决方案是每个线程有一个单独的队列并根据n % m标准拆分原始队列。

我担心的是数字可能分布不均,我最终会得到一些线程来减少工作量。

我一直在考虑实现自定义队列,它将检查具有相同标准的队列元素是否正在被其他线程处理,如果是,则尝试找到另一个。这可能行得通,我试图实现一些东西,但它变得复杂并且更难测试。这就是为什么我首先尝试找到问题的现有解决方案。

4

2 回答 2

1

不是答案,但评论太长了。

我的目标是按顺序处理奇数和偶数。

在这种情况下,赔率线程和偶数线程不能超过一个。您需要顺序运行的任何原因?您是否使用process(2)运行的结果process(4)

我担心的是数字可能分布不均,我最终会得到一些线程来减少工作量。

可能,但是如何在不破坏顺序约束的情况下将更多工作分配给空闲线程?

于 2012-04-28T19:35:40.293 回答
0

如果您有 2 种类型并且每种类型都必须按类型顺序处理,则您只能有 2 个线程。如果没有其他类型的消息要处理,则只有 1 个线程可以工作。

在这种情况下,使用 2 个队列并根据类型将消息放入其中并让每个线程消耗一个队列。您可以使用第三个线程来分发消息,但如果一个线程有一个完整的队列,您必须等到您可以使用来自原始生产者的消息,除非您有办法单独请求每种类型或者您可以丢弃消息。您在这里受到自己的约束。

除了理论部分,您可能还想查看 BlockingQueues & ExecuterServices,如该答案:Producer/Consumer threads using a Queue

于 2012-04-28T20:06:37.490 回答