2012-04-03 8 views
1

高いメッセージトラフィックで最適なパフォーマンスを得るためにC++ Apache QPIDクライアントをスレッドアウトする最適な方法を探しています。QPID C++クライアントマルチスレッド最適化

私たちのブローカーには3つの交換があり、それぞれに2つのユニ指向キューがあります。 C++クライアントがプッシュする3つの「アップリンク」キューには、かなりのトラフィックが発生します。

QPIDブローカーとのインターフェイスには、疎に文書化されたクラスがいくつかあります。接続、セッション、送信者、受信者。接続はセッションを提供し、セッションは送信者または受信者を提供します。これらのオブジェクトのどれがスレッドセーフであるか(スレッドセーフではない)、またはクライアントライブラリにスレッドが作成されるというQPIDのさまざまなドキュメントを読んだ後、私には不明です。 QPID FAQによると、ブローカでのスレッドはセッションレベルで発生します。クライアントで発生する箇所については言及していません。

アップリンクキューの1つにデータをプッシュする必要があるクライアントアプリケーション内に複数のスレッドコンテキストが存在します。複数のコンテキストにサービスを提供するセッション、接続、または送信者のプールを持つのが最善でしょうか? QPIDはこのシナリオのために最適化を組み込んでいますか?つまり、1人の共有送信者で十分でしょうか?

目標は、どこかにシングルスレッドのボトルネックを持っていないことですが、効率的にトラフィック負荷の存在ごとに並列にで拡張できるようにします。ブローカで

答えて

1

スレッディングは、接続レベルで起こります。私。指定された接続上のすべてのトラフィックはシリアル化され、スレッドプールによって処理されます。クライアントには、必要なIOを実行するすべての接続で共有されるスレッドのプールがあります。アプリケーション自体が、送信者/受信者を駆動するスレッドを作成できます。言及されたすべてのオブジェクト(接続、セッション、送信者と受信者)はスレッドセーフであることが意図されていますが、一般的に、セッションごとに1つのスレッドと、

+0

こんにちは、ドキュメントやその他の場所にスレッドセーフに関する情報がありますか?ありがとう。 – ipavlu