


Pourquoi est-ce que je reçois une erreur - les goroutines sont en veille en raison d'un problème de producteur et de consommateur
L'éditeur PHP Youzi peut rencontrer un message d'erreur courant lors de la résolution de problèmes de programmation : "les goroutines sont en veille". Cette erreur est généralement liée à des problèmes producteur-consommateur. Le problème producteur-consommateur est un scénario classique en programmation concurrente, dans lequel un ou plusieurs producteurs génèrent des données et un ou plusieurs consommateurs extraient les données pour les traiter. Lorsque le producteur génère des données plus rapidement que le consommateur ne peut les traiter, les goroutines (threads légers dans le langage Go) peuvent se mettre en veille. Cet article explique pourquoi cette erreur se produit et propose une solution.
Contenu de la question
C'est le code - producteur et plusieurs consommateurs en routine. Le producteur injecte des informations dans un canal et plusieurs consommateurs (chacun via une routine go) doivent les lire en parallèle.
func main() { alphabetArray := []string{"A", "B", "C"} alphabetChannel := make(chan string, 3) // producer. go func() { for _, alphabet := range alphabetArray { alphabetChannel <- alphabet } }() var wg sync.WaitGroup // spawn 10 consumers, consumers represented as a go-routine. for idx := 0; idx < 10; idx++ { wg.Add(1) go func() { for alphabet := range alphabetChannel { fmt.Println(alphabet) } }() } wg.Wait() }
Voici le lien vers le terrain de jeu - https://go.dev/play/p/yndataeexpb
L'erreur que j'ai reçue est la suivante -
Un Deuxième c Erreur fatale : tous les goroutines dorment - impasse !
Solution de contournement
Fermez la chaîne lorsque le producteur a terminé afin que le consommateur sache quand s'arrêter :
go func() { defer close(alphabetchannel) for _, alphabet := range alphabetarray { alphabetchannel <- alphabet } }()
Informez le groupe d'attente lorsque le consommateur a terminé :
go func() { defer wg.Done() for alphabet := range alphabetChannel { fmt.Println(alphabet) } }()
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

GO POINTER SYNTAXE ET ATTENDRE DES PROBLÈMES DANS LA BIBLIOTHÈQUE VIPER Lors de la programmation en langage Go, il est crucial de comprendre la syntaxe et l'utilisation des pointeurs, en particulier dans ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...
