Exécution de goroutines dans un gestionnaire HTTP
Lors de l'utilisation de goroutines dans un gestionnaire HTTP, il est naturel de s'interroger sur leur état d'achèvement après avoir renvoyé la réponse . Explorons l'exemple de code fourni :
// Handler that starts a goroutine func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() // Starts a goroutine called "worker" w.Write([]byte("Hello, World!")) // Sends a response to the client }
La question se pose : la goroutine "worker" sera-t-elle toujours terminée, même après l'envoi de la réponse HTTP ?
La réponse
Oui, la goroutine "worker" se complétera dans toutes les situations. Voici pourquoi :
Les Goroutines sont des threads légers qui s'exécutent simultanément avec le programme principal. Démarrer une goroutine avec go lui attribue une pile et la préempte lors de son exécution. Une fois la goroutine créée, elle s'exécute indépendamment du programme principal, même après le retour de la fonction actuelle (dans ce cas, le HomeHandler).
Dans l'exemple fourni, la goroutine commence à s'exécuter immédiatement après le go worker. () doubler. Il imprime un message pour indiquer son démarrage puis se met en veille pendant 10 secondes avant d'imprimer un message de fin.
Pendant que la goroutine est en cours d'exécution, la fonction HomeHandler continue l'exécution et envoie la réponse au client. Le serveur marque ensuite la requête comme terminée et retourne à l'écouteur, en attendant d'autres requêtes.
Étant donné que la goroutine "worker" est indépendante du gestionnaire, elle continue de s'exécuter même après l'envoi de la réponse HTTP. Le planificateur du système d'exploitation lui permet de partager le processeur avec d'autres goroutines, et éventuellement, il terminera sa veille et imprimera le message de fin.
Cas exceptionnels
Il existe seulement quelques cas exceptionnels où une goroutine peut ne pas se terminer :
Cependant, dans des programmes stables et bien écrits comme celui fourni dans votre exemple, les goroutines sont censées terminer leurs tâches avec succès.
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!