15

Go が Google App Engine で同時リクエストを処理する方法について少し混乱しています。だから私は誰かがいくつかの明確さを提供できることを願っています。

ここに私が集めた事実があります:

  1. Go は App Engine 上でシングル スレッドです。-これは、複数のスレッドで競合状態を作成することにより、任意のポインター演算を実行できるためです。

  2. goroutine は複数の OS スレッドに多重化されているため、I/O の待機中などに 1 つがブロックされても、他のスレッドは引き続き実行されます。

  3. [App Engine には] 10 の同時実行制限があり、[これは] すべてのランタイムでの同時スレッドの制限によって適用されます。そのような場合、ほとんどの場合、スケジューラは新しいインスタンスを起動しようとします。

Go が App Engine でシングル スレッドの場合、ポイント 3 は意味がありません。これで 1 と 2 が残ります。App Engine 上の Go がシングル スレッドであり、スレッドが I/O のブロック中に実行を継続する必要がある場合、App Engine Go インスタンスは I/O の待機中にすべての goroutine をブロックするようです。

これは正しいです?そうでない場合、Go の同時実行性は App Engine で実際にどのように機能するのでしょうか?

物事を定量化するのに役立ちます。接続を開いたまま 30 秒間保持するとします。単一の AE Go インスタンスが維持できる同時接続はどのくらいですか?

ありがとうございました。

編集: これは、Go インスタンスが 10 を超える同時リクエストを処理できるようにする機能リクエストです。インスタンスごとの同時リクエストの構成可能な制限を許可します。スターを付けてください。

4

3 に答える 3

22

Go App Engine インスタンスでは 10 個の同時リクエストが許可されますが、実行される CPU スレッドは 1 つだけです。実際には、複数の要求を同時に処理できますが、一度に CPU 作業を実行できるのは 1 つだけです。たとえば、あるリクエストがデータストア API 呼び出しが返されるのを待っている場合、別のリクエストは同じインスタンスによって自由に処理されます。

あなたの声明「Go が App Engine でシングル スレッドの場合、ポイント 3 は意味がありません。」間違っています。1 つの Go App Engine インスタンスに対する同時実行中のリクエストは 10 に制限されています。ドキュメンテーションは、「スレッド」について話すとき、言葉が少し緩いです。

于 2012-07-16T05:32:35.643 に答える
4

私は AppEngine の内部知識がないことを認めなければなりません。これはすべて憶測と推測ですが、ある程度合理的だと思います。

アプリが 10 スレッドの制限に達することはありません。これは、スレッドが作成される理由がほとんどないためです。まず、一度に実行されるゴルーチンの最大数が 1 に設定され、メモリーの安全性が強化されます。次に、通常の go プログラムとは異なり、アプリ エンジンは実際にシステムコールを行う必要はありません。唯一の時間はネットワーキングのためです。appengine のすべての IO は、1 つの epoll スレッドに多重化できます。これは、必要なのは常に 2 つのスレッドだけであることを意味します。次に、メモリの割り当てや接続の受け入れ/終了など、他のシステムコールを時々実行する必要がある場合に備えて、3 つ目または 4 つ目のスレッドを追加できます。これらは、非常に短時間ブロックする高速なシステム コールです。これらの他の syscall を使用しても、10 スレッドの制限にはまだほど遠い状態です。

最終的に appengine で行うことはすべて、ネットワーク経由で何かが返されるのを待つことになるため、同時実行性は影響を受けません。一度に多くのことを行うために複数のスレッドは必要ありません。

于 2012-07-12T22:50:43.053 に答える
1

私は答えを探していて、この質問/回答に出くわしましたが、この問題に関するより多くの公式文書も見つけました。Andrew Gerrand と Johan Euphrosine による投稿によると、これは明示的に構成できます。

その投稿から:

これにより、アプリの各インスタンスが最大 100 の要求を同時に処理するように構成されます (デフォルトの 10 から増加)。最大 500 の同時リクエストを処理するように Go インスタンスを構成できます。

于 2020-03-30T02:02:46.893 に答える