簡體   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