2016-07-29 4 views
1

私は、到着したリクエストからデータをバッファし、十分な受信後にpubsubを介してそれらのバッファを押し出す必要があるという点で、痛ましいほど複雑になっているアプリケーションサーバを持っています。バッファリングは問題ではありませんが、効率的なロックは...毛深いです、私はそれが私のサービスを遅くしているのではないかと心配しています。すべてのロックを解除するためにスレッドの安全性を落とすことを検討していますが、アプリのインスタンス数が同じユーザーの負荷を処理するために2倍(またはそれ以上)になることが心配です。あなたのappengineアプリスレッドを安全にする利点は何ですか?

私が理解しているのは、スレッドセーフなアプリケーションは、各スレッドが請求済みのアプリケーションインスタンスであることです。言い換えると、複数のスレッドをプロセス内で実行できるようにすることで、2つのインスタンスに対して料金が請求されます。唯一の利点は、スレッドがメモリを共有できるため、全体的な占有面積が小さくなることです。

言い換えれば、マルチスレッドアプリケーションインスタンスは複数の同時接続を処理するのですか、またはそれぞれの請求されたアプリケーションインスタンスは別々のスレッドですか - 一度に1つの要求しか処理できませんか?スレッドの安全性を取り除くと、もっと大きなアプリケーションインスタンスを実行する必要がありますか?

答えて

0

マルチスレッドは決して課金とは関係なく、そのインスタンスで10スレッドが並行して実行されていても1つのインスタンスに対して支払いを行います。

+0

つまり、スレッドの安全性を失うと、もっと多くのインスタンスが必要になるでしょう... – Sniggerfardimungus

+0

通常、はいです。しかし、あなたがロックなどについて話しているので、私はあなたの既存のコードを改善する余地があると感じています。 –

+0

私は、キューに入れられるデータに応じて、いくつかの異なるバッファを作成しています。バッファがいっぱいになると(または特定の年齢を超えて)、私はpubsubを介してそれを押し出します。各バッファは独自のロックを持ち、変更されている間だけロックされます。インスタンスが複数の同時リクエストを処理している場合、いくつかのブロッキングが起こっている可能性があります(バッファがたくさんありますが、そのうちの2〜4つは非常にトラフィックが多いです)。もし私がpubsub私はロックを保持している間はそうしません。ロックを保持している間にバッファを空のリストに置き換えたバッファへの参照を公開します。 – Sniggerfardimungus

関連する問題