Différences entre Go Playground et Go sur votre machine : exécution de Goroutine
Pour résoudre la confusion concernant l'exécution de Goroutine, un extrait de code a été exécuté sur les deux le Go Playground et une machine locale. Le Playground a généré l'erreur « Le processus a pris trop de temps », suggérant la création d'un Goroutine en fonctionnement perpétuel, tandis que la machine locale aboutissait à une sortie presque instantanée. Cela soulève la question de savoir si la fonction Goroutine dans la fonction other() se termine lorsque la Goroutine principale se termine ou continue de s'exécuter en arrière-plan.
Explication
On the Go Playground , GOMAXPROCS est défini sur 1. Cela indique qu'un seul Goroutine est exécuté à la fois. Sans blocage, le planificateur ne basculera pas vers d'autres Goroutines.
Dans le code, le Goroutine principal démarre et se bloque sur le canal terminé. Le planificateur doit passer à l'autre() Goroutine, qui envoie une valeur sur le canal terminé, rendant les deux Goroutines exécutables. Le planificateur choisit de continuer à exécuter other(). Puisque GOMAXPROCS vaut 1, le Goroutine principal reste bloqué.
other() lance alors un Goroutine en boucle infinie. Cette Goroutine continue de fonctionner, empêchant la Goroutine principale de reprendre. Par conséquent, le délai d'attente du Playground se produit.
Localement, GOMAXPROCS dépasse généralement 1. En conséquence, pendant que la Goroutine en boucle infinie est en cours d'exécution, une autre Goroutine (probablement la Goroutine principale) est exécutée simultanément. Lorsque le Goroutine principal revient, le programme se termine, car il n'attend pas l'achèvement des autres Goroutines non principaux.
Go Playground Modification
En définissant explicitement GOMAXPROCS sur 1 sur le Go Playground, il est possible de reproduire le comportement "Le processus a pris trop de temps". À l'inverse, définir GOMAXPROCS sur une valeur plus élevée, telle que 2, entraînera souvent un ordre d'exécution différent et une terminaison réussie sans délai d'attente.
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!