繁体   English   中英

有序多线程消息处理

[英]In-order multi-threaded message processing

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

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

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

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

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

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

没有答案,但评论太久。

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

在这种情况下,赔率和偶数不能超过一个。 有什么理由需要顺序运行? 您是否使用process(2)的结果来运行process(4)

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

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

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

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

除了理论上的部分,您可能还想看一下BlockingQueues和ExecuterServices,如该答案: 使用队列的生产者/消费者线程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM