Maison > Article > développement back-end > Les Goroutines dans les gestionnaires HTTP de Go se terminent-ils toujours après la réponse ?
Exécution de Goroutine dans les gestionnaires HTTP
Dans Go, les gestionnaires HTTP effectuent souvent des tâches asynchrones à l'aide de goroutines. Cependant, il n'est pas clair si ces goroutines se termineront une fois que le gestionnaire aura renvoyé une réponse.
Considérez le code suivant :
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
La goroutine du travailleur se terminera-t-elle dans toutes les situations une fois la réponse écrite dans le client ?
Réponse :
Le travailleur goroutine se terminera dans tous les cas normaux. La seule façon de l'empêcher de se terminer est de quitter le programme (en revenant de main() ou en rencontrant une erreur fatale), ou de manquer de mémoire.
Dans un scénario de requête-réponse HTTP typique, le La fonction de gestionnaire (dans ce cas, HomeHandler) revient après avoir écrit la réponse au client. Cependant, le programme ne se ferme pas immédiatement. La goroutine exécutant la fonction de travail continuera à s'exécuter jusqu'à ce qu'elle se termine ou rencontre une erreur.
La fonction main(), qui est responsable du démarrage du serveur HTTP, continuera à s'exécuter jusqu'à la fin du programme. Par conséquent, la goroutine de travail a suffisamment de temps pour terminer son exécution, quel que soit le moment où la réponse est envoyée au client.
En conclusion, même si cela peut sembler contre-intuitif au début, les goroutines démarrées dans les gestionnaires HTTP se termineront même après la réponse est renvoyée, sauf si le programme se termine anormalement ou manque de mémoire. Cela permet d'effectuer des tâches asynchrones sans empêcher le gestionnaire d'envoyer la réponse.
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!