60

ファイルに設定threadsafe: trueしたapp.yaml場合、リクエストを処理するために新しいインスタンスが作成されるタイミングと、既存のインスタンスで新しいスレッドが作成されるタイミングを管理するルールは何ですか?

リクエストごとに計算量の多い処理を実行するアプリを使用している場合、マルチスレッド化によって何かメリットがありますか? つまり、インスタンスはマルチコア インスタンスですか、それともシングル コアですか?

または、既存のスレッドが IO で待機しているときにのみ、新しいスレッドがスピンアップされますか?

4

3 に答える 3

37

現在、特定のインスタンスが新しいリクエストを受け入れることができるかどうかを判断するために、次の一連のルールが使用されています。

if processing more than N concurrent requests (today N=10): false
elif exceeding the soft memory limit: false
elif exceeding the instance class CPU limit: false
elif warming up: false
else true

以下の合計 CPU/コア制限は現在、各インスタンス クラスに適用されます。

CLASS 1: 600MHz 1 core
CLASS 2: 1.2GHz 1 core
CLASS 4: 2.4GHz 1 core
CLASS 8: 4.8GHz 2 core

B8そのため、完全に CPU バインドされた最大 2 つのリクエストを並行して処理できるのはインスタンスだけです。

threadsafe: true8 未満のインスタンス クラスに(Python) または(Java) を設定<threadsafe>true</threadsafe>すると、1 つのインスタンスで複数の CPU バウンド リクエストを並行して処理することができなくなります。

完全に CPU バウンドまたは I/O を実行していない場合、Python および Java ランタイムは、最大 10 個の同時要求を処理するための新しいスレッドを生成します。threadsafe: true

また、Go ランタイムはシングル スレッドですが、同時リクエストをサポートしていることにも注意してください。リクエストごとに 1 つのゴルーチンを生成し、I/O の実行中にゴルーチン間で制御を譲ります。

于 2012-08-09T11:47:01.637 に答える
1

Kyle Finley によって提案されたリンクから次のメッセージを読む

Jeff Schnitzer: 10 スレッドというハード リミットはまだありますか?

はい、おそらくあなたが期待する理由ではありません。私たちが遭遇する主な問題は、メモリ管理です。デフォルトを 100 に上げると、多くのアプリでメモリ不足による死亡が発生し (現在よりも多く)、これらの死亡は python/java/go では異なって表示されます。前進する正しい道は、メモリに関するよりインテリジェントなアルゴリズムであり、構成可能性を提供します。これは、スケジューラーのために取り組んでいる種類のプロジェクトの例ですが、他のチームと同様に、プロジェクトに優先順位を付ける必要があります。フィードバック/データ/投票を得ることができるように、これ (またはその他の必要なスケジューラーの機能強化) をパブリック イシュー トラッカーに提出することをお勧めします。

于 2012-08-07T14:11:46.543 に答える