


Erreur fatale : tous les goroutines dorment - impasse ! Erreur d'exécution
l'éditeur php Strawberry vous présentera une erreur de programmation courante dans cet article : erreur fatale : "Toutes les goroutines dorment - blocage ! Erreur d'exécution". C'est l'une des erreurs courantes du langage Go et l'un des défis que les développeurs rencontrent souvent. Dans cet article, nous expliquerons en détail la cause et la solution de cette erreur pour aider chacun à mieux comprendre et gérer ce problème. Que vous soyez débutant ou développeur expérimenté, vous obtiendrez de précieuses informations et conseils grâce à cet article. Explorons ensemble !
Contenu de la question
Je suis très nouveau dans la concurrence en go, j'ai donc essayé un exemple avec des canaux et des goroutines. Je veux le modèle producteur-consommateur. La fonction producteur donne toujours des chaînes aléatoires et le consommateur les modifie en les mettant en majuscules. Je souhaite l'exécuter pendant une durée limitée (2 secondes).
package main import ( "fmt" "math/rand" "strings" "time" ) func producer(x []string, c chan string) { i := 1 for i > 0 { randomIndex := rand.Intn(len(x)) pick := x[randomIndex] c <- pick } } func consumer(x string, c chan string) { x1 := strings.ToUpper(x) c <- x1 } func main() { s := []string{"one", "two", "three", "four"} c1 := make(chan string) d1 := make(chan string) go producer(s, c1) go consumer(<-c1, d1) stop := time.After(2000 * time.Millisecond) for { select { case <-stop: fmt.Println("STOP AFTER 2 SEC!") return default: fmt.Println(<-d1) time.Sleep(50 * time.Millisecond) } } }
Je ne reçois qu'un seul élément du tableau et quelques erreurs. Quels changements doivent être apportés pour que cet exemple fonctionne ?
Sortie :
Deux
ERREUR FATALE : tous les goroutines dorment - impasse !
goroutine 1 [chan recevoir] : main.main()
Coroutine 6 [chan send] : main.producter({0xc00004e040, 0x4, 0x0?}, 0x0?) Créé par principal. principal Statut de sortie 2
Solution de contournement
Votre consommateur doit fonctionner en boucle, cela a déjà été mentionné.
Modifiez le premier paramètre de consumer pour qu'il soit chan字符串
au lieu d'une chaîne. De cette façon, le producteur peut continuer à écrire sur cette chaîne pour que le consommateur puisse publier sur une autre chaîne jusqu'à l'expiration du délai.
func consumer(consumechan chan string, outch chan string) { for { select { case s := <- consumechan: s = strings.toupper(s) outch <- s } } }
Maintenant, lors de l'appel de go consumer()
之前的主函数中,您正在等待生产者对 c1
通道的第一个响应。不要这样做,而是将 c1
, le canal est passé comme premier argument.
func main() { s := []string{"one", "two", "three", "four"} c1 := make(chan string) d1 := make(chan string) go producer(s, c1) go consumer(c1, d1) stop := time.After(2000 * time.Millisecond) for { select { case <-stop: fmt.Println("STOP AFTER 2 SEC!") return case response := <- d1: fmt.Println(response) time.Sleep(50 * time.Millisecond) } } }
Cela devrait montrer que le producteur écrit continuellement des nombres aléatoires sur le canal c1
et que le consommateur écrit continuellement tout le texte en majuscules sur le canal d1 jusqu'à ce que les 2 secondes soient écoulées.
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)

Sujets chauds

Avantages du framework Golang Golang est un langage de programmation simultanée hautes performances particulièrement adapté aux microservices et aux systèmes distribués. Le framework Golang facilite le développement de ces applications en fournissant un ensemble de composants et d'outils prêts à l'emploi. Voici quelques-uns des principaux avantages du framework Golang : 1. Hautes performances et concurrence : Golang lui-même est connu pour ses hautes performances et sa concurrence. Il utilise des goroutines, un mécanisme de thread léger qui permet l'exécution simultanée de code, améliorant ainsi le débit et la réactivité des applications. 2. Modularité et réutilisabilité : le framework Golang encourage la modularité et le code réutilisable. En divisant l'application en modules indépendants, vous pouvez facilement maintenir et mettre à jour le code

Comment utiliser GO ou Rust pour appeler les scripts Python pour réaliser une véritable exécution parallèle? Récemment, j'ai utilisé Python ...

La confusion et la cause du choix de PHP à partir récemment, j'ai accidentellement appris le salaire des collègues dans d'autres postes tels que Android et intégrés C dans l'entreprise, et j'ai constaté qu'ils sont plus ...

Dans Debian Systems, la rotation des journaux de GO repose généralement sur des bibliothèques tierces, plutôt que sur les fonctionnalités fournies avec des bibliothèques standard GO. Le bûcheron est une option couramment utilisée. Il peut être utilisé avec divers cadres journaux (tels que ZAP et Logrus) pour réaliser la rotation automatique et la compression des fichiers journaux. Voici un exemple de configuration à l'aide des bibliothèques Lumberjack et Zap: PackageMainImport ("gopkg.in/natefinch/lumberjack.v2" "go.uber.org/zap" "go.uber.org/zap/zapcor

Optimisation de l'efficacité de l'envoi des e-mails dans la fonction d'enregistrement du langage GO. Dans le processus d'apprentissage du développement du backend de la langue GO, lors de la mise en œuvre de la fonction d'enregistrement des utilisateurs, il est souvent nécessaire d'envoyer une envie ...

Analyse de l'état d'audience du cadre GO dans l'écosystème de programmation GO actuel, les développeurs sont souvent confrontés à choisir le bon cadre pour répondre aux besoins de leurs entreprises. Aujourd'hui, nous ...

L'ordre d'exécution de la fonction init () dans le langage Go dans la programmation Go, la fonction init () est une fonction spéciale, qui est utilisée pour exécuter certaines fonctions nécessaires lors de l'initialisation du package ...

Utilisation de Golang pour implémenter Linux ...
