Maison > développement back-end > Golang > Une Goroutine lancée dans un gestionnaire HTTP se terminera-t-elle toujours après l'envoi de la réponse ?

Une Goroutine lancée dans un gestionnaire HTTP se terminera-t-elle toujours après l'envoi de la réponse ?

Barbara Streisand
Libérer: 2024-11-25 17:27:13
original
1006 Les gens l'ont consulté

Will a Goroutine Launched in an HTTP Handler Always Finish After the Response is Sent?

Exécution de goroutine dans les gestionnaires HTTP

Question :

Dans l'exemple de code fourni, où une goroutine est lancée dans un Gestionnaire HTTP (HomeHandler), la goroutine terminera-t-elle toujours son exécution, même après que le serveur ait renvoyé la réponse au client ?

Exemple de code :

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)
}
Copier après la connexion

Réponse :

Oui, la goroutine démarrée dans work terminera son exécution dans toutes les situations.

Les goroutines sont des threads légers au sein d'un programme Go et ne sont pas contraintes par l'exécution de la fonction principale ou du gestionnaire HTTP. Ils continuent de s'exécuter simultanément à moins qu'ils ne rencontrent des erreurs ou qu'ils ne soient explicitement arrêtés. Dans ce cas, la goroutine de travail est démarrée de manière asynchrone et la fonction HomeHandler est renvoyée immédiatement après avoir écrit la réponse au client. Même après le retour de la fonction de gestionnaire et le serveur envoie la réponse, la goroutine de travail continue de s'exécuter jusqu'à ce qu'elle termine sa tâche de mise en veille pendant 10 secondes et d'imprimer son message d'achèvement.

Les seuls scénarios dans lesquels une goroutine peut ne pas terminer sont :

  • Si la fonction principale se termine et termine l'ensemble du programme.
  • Si le programme rencontre une erreur fatale, telle que l'exécution manque de mémoire.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal