Maison > développement back-end > Golang > Comment puis-je faire fonctionner le Goroutine principal indéfiniment dans Go ?

Comment puis-je faire fonctionner le Goroutine principal indéfiniment dans Go ?

Patricia Arquette
Libérer: 2024-12-17 21:25:10
original
182 Les gens l'ont consulté

How Can I Keep the Main Goroutine Running Indefinitely in Go?

Prolonger l'existence de la goroutine principale dans Go

Sommeil éternel

Go offre une gamme de mécanismes pour que la goroutine principale continue de fonctionner indéfiniment sans consommer de puissance de traitement . Considérez ces stratégies :

  • Sélection sans cas : le blocage permanent sans consommation de processeur est réalisable via une instruction select sans cas ni clause par défaut :

    select {}
    Copier après la connexion
  • Réception depuis un canal vide : La goroutine principale peut être suspendue indéfiniment en recevant continuellement d'un canal vide :

    <-make(chan int)
    Copier après la connexion
  • Réception d'un canal nul : De même, recevoir d'un canal nul produit le même effet :

    <-chan int(nil)
    Copier après la connexion
  • Envoi vers un canal nul : Envoi à un canal nul suspend également définitivement le goroutine principal :

    (chan int)(nil) <- 0
    Copier après la connexion
  • Verrouillage d'un mutex pré-verrouillé : Le verrouillage d'un mutex déjà verrouillé bloque efficacement le goroutine principal :

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()
    Copier après la connexion

Contrôlé Sortie

Pour faciliter une sortie en douceur, un canal de sortie dédié peut être utilisé. Lorsqu'il est nécessaire de terminer le programme, ce canal est fermé :

var quit = make(chan struct{})

func main() {
    defer close(quit)
    // Application code...
    <-quit
}
Copier après la connexion

Dans une goroutine séparée, la fermeture du canal de sortie déclenche la sortie de la goroutine principale :

close(quit)
Copier après la connexion

Veille sans blocage

Si l'objectif est d'empêcher la goroutine principale de se terminer sans la bloquer, la fonction time.Sleep() peut être employé avec une durée suffisamment longue, plafonnée à environ 292 ans :

time.Sleep(time.Duration(1<<63 - 1))
Copier après la connexion

Pour des durées prolongées, envisagez une boucle sans fin intégrant le temps ci-dessus.Sleep() :

for {
    time.Sleep(time.Duration(1<<63 - 1))
}
Copier après la connexion

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