2012-03-13 6 views
0

ブロッキングコレクションは、通常キューよりも多くパイルアップしています。次のシナリオでは、C#4.0でのブロッキングコレクションのパフォーマンス

  1. 私はコンシューマとして専用のスレッドを持っています。
  2. プロデューサとして3つ以上の専用スレッド。

    ノーマルキュー(Monitor.Enter ...)とブロッキングコレクションでチェックしました。

結果:

Both Queues are getting pile up (Obviously , Consumers < Producers) 

通常のキューが自動的に何百何千ものと明らかに以上を増加し続けている& 20000や30000 後に増加しかし、コレクションをブロックし続けていないいくつかの点でクリアされます我々は明確な選択肢がないと同時に、私は生産者を制限したくない

いずれか1つの光をあげることができます..

+0

できればコードを投稿する必要があります。また、「数千人」を意味するために「lakhs」を使用していますか?私はほとんどの英語の話者がその用語に精通しているとは思わない。 –

+2

私はラークスがベーグルとサーモンのあいまいな言及だと思った。 – zmbq

+1

ほとんどの作業キューのシナリオでは、作業を行うことはデキュー時間よりもはるかに重要です - 「作業を行う」ことが些細なものであれば、待ち行列に入れられない* 。ここでの問題は、単に「仕事をする」が追加の仕事を積み重ねるのにかかるよりも時間がかかるということだけではないと確信していますか?それは待ち行列の欠点ではありません... –

答えて

1

これは私が作っている提案です - ZeroMQを試してみてください。プロデューサ/コンシューマパターンは十分にサポートされています(PUSHとPULLソケットを使用します)。あなたは同じプロセスを使用しているので、メッセージロスはありません。

+0

私はかなり長い間ZeroMQに特化して取り組んできました。私は毎秒何百万ものメッセージを流す必要があるため、非常に高い処理能力と低い待ち時間の要件を持っていました。私はZeroMQをプロセス間で何とか愛用していますが、並行コレクションやポイントツーポイントメッセージの受け渡しを含むカスタムソリューションを保持することができないため、inprocの作業には推奨できません。私はinterproc用のZeroMQと、inproc用のカスタマイズされたソリューションを実装しました。私は自分自身で書いた "フォワーダ"デバイスを通して2つを接続しました。 –

関連する問題