0

Web サーバーと同様に、何百もの同時要求を処理する多くのスレッドを持つブースト asio アプリケーションがあります。すべてのリクエストは、memcached と redis の両方を呼び出す必要があります (それぞれ libmemcached と redispp を介して)。この状況でのベスト プラクティスは、各スレッドから redis と memcached の両方に個別に接続することですか (サーバー上のオープン ソケットを効果的に 3 倍にし、リクエストごとに 3 つ)? または、単一の memcached/redis 接続を使用して静的オブジェクトを構築し、すべてのスレッドがその単一の接続を共有できるようにする方法はありますか? このようなスレッドの安全性に関しては少し混乱しています。スレッド間ですべてを非同期にする必要がありますが、各スレッドの個々の要求をブロックします (したがって、各スレッドは線形の進行を持ち、ただし、多くのスレッドは、いつでも独自の進行状況でさまざまな場所に存在する可能性があります)。それは理にかなっていますか?

本当にありがとう!

4

1 に答える 1

0

memcached には同期プロトコルがあるため、前の応答を取得する前に次の要求を書き込むべきではありません。そのため、他のスレッドは同じ memcached 接続でチャットできません。「ブロッキング」モードで作業する場合は、スレッドローカル接続を作成することをお勧めします。

または、「非同期」の方法で動作させることもできます。接続のプールを作成し、そこから接続を選択します (そしてロックします)。リクエストが完了したら、プールに戻します。

また、リクエスト キューを作成し、それを特別なスレッドで処理することもできます (マルチ取得とコールバックを使用)。

于 2013-07-11T17:56:49.753 に答える