Maison > Article > développement back-end > Les Goroutines peuvent-elles être utilisées efficacement dans l'environnement standard de Google App Engine ?
Les goroutines peuvent-elles être utilisées efficacement dans l'environnement standard de Google App Engine ? Explorons cela plus en profondeur.
Considérons l'exemple de code suivant :
<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) { go func() { // do something ... }() return // 200 }</code>
Bien que cet extrait de code puisse sembler fonctionner correctement, il est Il est important de noter que les goroutines qui persistent au-delà de la durée de vie de la requête ne sont pas recommandées. En effet, l'environnement standard de Google App Engine ne prend pas en charge l'exécution parallèle des goroutines. Par conséquent, les goroutines qui survivent à la requête peuvent entraîner un comportement inattendu et sont déconseillées.
Comme alternative, vous pouvez utiliser la fonction runtime.RunInBackground pour lancer l'exécution du code. dans une goroutine en arrière-plan :
<code class="go">func MyHandler(w http.ResponseWriter, r *http.Request) { err := runtime.RunInBackground(c, func(c appengine.Context) { // do something... }) return // 200 }</code>
En utilisant runtime.RunInBackground, vous fournissez une fonction qui sera exécutée dans une goroutine en arrière-plan en utilisant un contexte d'arrière-plan dédié. Cette approche garantit que le traitement en arrière-plan n'interfère pas avec le contexte de la requête actuelle et constitue une méthode privilégiée pour effectuer des tâches en arrière-plan dans l'environnement standard d'App Engine. Cependant, il est essentiel de se rappeler qu'il existe une limite de dix requêtes simultanées en arrière-plan par instance pour éviter de surcharger les ressources de l'instance.
Bien que les goroutines qui survivent à la requête ne soient pas prises en charge , les goroutines qui fonctionnent dans le contexte de la requête sont entièrement prises en charge par l'environnement standard d'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)
Par conséquent, les goroutines de courte durée dans le contexte de la requête peuvent être utilisées efficacement pour le traitement parallèle, la synchronisation et d'autres tâches sans compromettre les performances ou la stabilité de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!