Google App Engine のゴルーチン: 制限と代替手段
Google App Engine スタンダード環境では、ゴルーチンがサポートされていますが、特定の制限があります。提供した例は機能しているように見えますが、リクエストを超えて存続する goroutine を使用することはお勧めできません。
なぜ安全ではないのですか?
実行を続ける goroutinesリクエストが完了すると、アプリケーション インスタンスでメモリ リークやリソース枯渇が発生する可能性があります。これは、ゴルーチンの有効期間がリクエストのライフサイクルに関連付けられていないためです。
代替: 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 status code }</code>
Runtime.RunInBackground の制限
インスタンスあたりの同時バックグラウンド リクエストの制限は 10 です。この制限を超えると、パフォーマンスの問題やアプリケーション エラーが発生する可能性があります。
リクエスト コンテキスト内のゴルーチン
リクエストのコンテキスト内に存在するゴルーチンがサポートされています。これは、ゴルーチンを使用して、リクエストの処理の一部であるタスクを処理できることを意味します。ただし、これらのゴルーチンはリクエストが完了する前に終了する必要があります。
概要
ゴルーチンは Google App Engine スタンダード環境でサポートされていますが、制限事項に注意することが重要です。安全かつ効率的なバックグラウンド処理を行うには、runtime.RunInBackground を使用し、リクエストが終了する前にバックグラウンド タスクが完了するようにします。
以上がGoogle App Engine のゴルーチン: 長時間実行されるゴルーチンはなぜ悪い考えなのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。