2017-03-09 5 views
1

BlockingQueue(配列またはリンク)の使用方法を理解し始めています。キューイングがリソース(CPU、メモリなど)にどのように影響するのだろうか?どのようなサイズでBlockingQueue resource consuming

はフルキューが(いないスレッドの数の点ではなく、より多くの割合の点で)サーバーの問題であることを開始していますか?

答えて

1

BlockingQueueの目的は、プロデューサを消費者から切り離すことです。これは通常、コンシューマーの速度が制限されている場合(通常、CPU、I/Oスループット、またはプロデューサのレイテンシを減らすため)に選択されます。

キューを維持するために必要なメモリ&オーバーヘッドのキュートレードオフ改善された生産速度の使用。

通常、キューに必要なメモリは、ItemCount * ItemSize(およそオーバーヘッド)に近似します。 BlockingQueueの実装は、無限の成長を防ぐための容量制限を提供します。しかし、容量に達した場合、生産者の厳しい抑制が典型的に起こり得る。

キューの不均衡の主な要因は、アイテムが生成されるピークレートです。&アイテムが消費される安定したレートと、ピークの数(アイテム数)です。これらを計算すると、時間と#項目の両方で、バックログがどれくらいの大きさであるかを示すことができます。現代のコンピュータと

、使用可能なメモリ&、達成可能なキューのサイズが非常に大きいです。しかし、膨大なバックログや大量のコミットされていないビジネスデータは非常に望ましくないことがあります。

一般に

場合、キューイング溶液を慎重に検討すべきである。実質的に保証するために、クリア網羅プロセス境界せずに、元の製造プロセスを超えて(処理時間)バックログの可能性があろう

  • バックログが完了しました。
  • 望ましくない量のコミットされていないビジネスデータの可能性があります。
  • バックログが利用可能なヒープのサイズに近づく可能性があります。

すべてのレートは、特定のアプリケーションによって異なります。しかし、これらはいくつかの一般的な原則であり、&のキューイングソリューションの分析を支援するはずです。

+0

基本的には、キューのサイズに直接影響する各スレッドの処理時間を監視することが重要です。 各スレッドの処理時間が長すぎると判断された場合、スレッドを複数のタスク、したがって複数のスレッドに分割してより高速に実行できるようにするソリューションとなるでしょうか? – jon

+0

コンシューマータスクを破棄することが解決策であるとは確信していませんが、同じ時間が必要になる可能性があります。ある時点でバックログの可能性を与えるレート制限のタスクがあった場合、長い(複数のキューに入れられたステージ)パイプラインに関係なく、これがまだ存在すると仮定します。 –