Maison > développement back-end > Golang > Pourquoi le délai d'attente de Go Playground expire-t-il lors de l'exécution du même code sur une machine locale ?

Pourquoi le délai d'attente de Go Playground expire-t-il lors de l'exécution du même code sur une machine locale ?

Mary-Kate Olsen
Libérer: 2024-10-23 23:25:29
original
528 Les gens l'ont consulté

Why Does the Go Playground Timeout While Running the Same Code on a Local Machine?

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!

source:php
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