Goroutines は Google App Engine のスタンダード環境で効果的に使用できますか?

Mary-Kate Olsen
リリース: 2024-10-29 16:05:32
オリジナル
1026 人が閲覧しました

 Can Goroutines Be Used Effectively in Google App Engine's Standard Environment?

Google App Engine のゴルーチン (スタンダード環境)

ゴルーチンは Google App Engine のスタンダード環境で効果的に利用できますか?これについてさらに詳しく見てみましょう。

ゴルーチンによるバックグラウンド処理

次のコード例を考えてみましょう:

<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) {

  go func() {
    // do something ...
  }() 

  return // 200
}</code>
ログイン後にコピー

このコード スニペットは正しく機能しているように見えますが、実際は機能しません。リクエストの存続期間を超えて存続するゴルーチンは推奨されないことに注意することが重要です。これは、Google App Engine のスタンダード環境がゴルーチンの並列実行をサポートしていないためです。したがって、リクエストを超えて存続するゴルーチンは予期しない動作を引き起こす可能性があるため、推奨されません。

Runtime.RunInBackground: 解決策

代わりに、 runtime.RunInBackground 関数を利用してコードの実行を開始できます。バックグラウンドのゴルーチン内:

<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) {

  err := runtime.RunInBackground(c, func(c appengine.Context) {
    // do something...
  })

  return // 200
}</code>
ログイン後にコピー

runtime.RunInBackground を使用すると、専用のバックグラウンド コンテキストを使用してバックグラウンドのゴルーチンで実行される関数を提供します。このアプローチにより、バックグラウンド処理が現在のリクエストのコンテキストに干渉しないことが保証され、App Engine のスタンダード環境でバックグラウンド タスクを実行する場合に推奨される方法です。ただし、インスタンスのリソースに過大な負荷がかかるのを防ぐために、インスタンスあたりのバックグラウンド リクエストの同時実行数は 10 個に制限されていることに注意してください。

リクエスト コンテキスト内のゴルーチン

リクエストを超えて存続するゴルーチンはサポートされていません。 、リクエストのコンテキスト内で動作するゴルーチンは、App Engine のスタンダード環境で完全にサポートされています。

The Go runtime environment for App Engine provides full support for
goroutines, but not for parallel execution: goroutines are scheduled
onto a single operating system thread. This single-thread restriction
may be lifted in future versions. Multiple requests may be handled
concurrently by a given instance; that means that if one request is,
say, waiting for a datastore API call, another request may be
processed by the same instance. (Source)
ログイン後にコピー

したがって、リクエストのコンテキスト内の有効期間の短いゴルーチンは、並列処理、同期、その他のタスクに効果的に使用できます。アプリケーションのパフォーマンスや安定性が損なわれます。

以上がGoroutines は Google App Engine のスタンダード環境で効果的に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート