Maison > développement back-end > Golang > Mon Goroutine se terminera-t-il après l'envoi de la réponse HTTP ?

Mon Goroutine se terminera-t-il après l'envoi de la réponse HTTP ?

Barbara Streisand
Libérer: 2024-11-25 21:38:14
original
682 Les gens l'ont consulté

Will My Goroutine Finish After the HTTP Response is Sent?

Exécution de goroutine dans un gestionnaire HTTP

Lors de l'exécution d'une goroutine dans un gestionnaire HTTP, il est naturel de se demander si son exécution se poursuivra après le retour de la réponse. Considérez l'exemple de 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)
}
Copier après la connexion

Ce code lance une goroutine dans le HomeHandler qui se met en veille pendant 10 secondes avant la fin de l'impression. Une fois la réponse écrite, la goroutine principale revient de la fonction HomeHandler.

La goroutine se terminera-t-elle ?

Dans ce scénario spécifique, la goroutine terminera en effet son exécution, en imprimant les déclarations "worker démarré" et "travailleur terminé" sur la console. En effet :

  • La goroutine est démarrée en tant que thread d'exécution distinct, indépendant de la goroutine principale gérant la requête HTTP.
  • La fonction de travail est un thread léger qui ne Il ne consomme pas beaucoup de ressources, il est donc peu probable qu'il soit arrêté en raison de limitations des ressources système.
  • La goroutine principale ne renvoie que la fonction HomeHandler, pas la fonction main(). Cela signifie que le programme continue de s'exécuter en arrière-plan, permettant à la goroutine de terminer son exécution.

La seule façon de terminer prématurément la goroutine dans ce cas serait de rencontrer un état instable, comme l'exécution manque de mémoire, ou pour arrêter explicitement la goroutine à l'aide de techniques de synchronisation (non couvertes dans cet exemple de code).

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