2016-03-29 7 views
0

の均一な負荷分散を持つプロデューサコンシューマモデルプロデューサのコンシューマシナリオは、1人のプロデューサ(P)とN(3人) (例えば、C1、C2、C3)。現在では、消費者間で負荷を共有する必要があり、その結果、C1 : C2 : C3 = 1 : 3 : 6となります。これは、Pが10% to C1, 30% to C2 and 60% to C3を供給しなければならないことを意味し、この分布は一様でなければならない。N1:N2:....:NM

Pは10のアイテムを生成すると言う。カウンター法は、ラウンドロビンと一緒に適用された場合、その後のシナリオは

items 1,2,3 goes to C1, C2, C3, // C1 is done here with its 10% 
items 4,5,6 goes to C2, C3, C2, // C2 is done here with its 30% 
items 7,8,9 goes to C3, C3, C3, // C3 is bearing continuous load 
item 10 goes to C3 

以下のようになります。しかし、ここでは分布が均一ではなかった、C3は、目的を失敗の連続負荷を支持しています。

理想の分布は、私がここに仮想的な例を提供しようとしている

items 1,2,3 goes to C3, C2, C3, 
items 4,5,6 goes to C3, C2, C3, 
items 7,8,9 goes to C3, C1, C3, 
item 10 goes to C2 

のようなものを持っているでしょう。実際のシナリオでは、上記の例では10とは異なり、カウントはあらかじめ定義されていません。実際のシナリオでは、プロデューサーは生産を続け、決して終わりのないプロセスです。例えば、ゲートを通過する車両の数が1 : 3 : 6の比率でなければならない3つの料金所C1、C2、C3を有する料金所を想定し、その分布は一様でなければならない。これを実装するための効率的なアルゴリズムを提案してください。

答えて

1

プロデューサーは、1から10までの乱数を生成する方法があります。番号が1の場合、アイテムはC1に移動します。番号が2、3、または4の場合はC2になります。番号が5-10の範囲にある場合、アイテムはC3に移動します。

これは、10個のアイテムごとに配布が完全であることを保証するものではありませんが、合理的に優れた乱数ジェネレータを仮定すると、配布は多数(1千)の項目の。

+0

良いと簡単に実装する。 –

1

トポロジカルソートの変形を使用することをお勧めします。

c3; c2はc2 = c3 + 1まで待ちます。同様に、c1はc1 = c2 + 1まで待ちます。

そうすれば、分布は次のようになります:

C3 C3 C2
C1 C3 C2
C3、C2、C3
C3

これは私が提供あくまでも一例です。あなたは同様のロジックに基づいて消費者を解放することを選択することができます

+0

これは良い方法です、私は実現可能性を確認する必要があります。 –

+0

これについて詳しく説明できますか?私はこれが長期間にわたってその分布を維持する方法を見ていない。あなたは、消費者が定期的に開始し、停止することを提案していますか? –

関連する問題