Maison >développement back-end >Golang >Pourquoi mon programme Go se bloque-t-il malgré « runtime.GOMAXPROCS(2) » et une utilisation élevée du processeur ?
Malgré GOMAXPROCS(2), le programme reste bloqué
Rencontre avec un scénario déroutant dans lequel un programme configuré avec runtime.GOMAXPROCS(2) continue de se bloquer pendant la sortie numérique est une situation déroutante. Malgré une utilisation élevée du processeur, les goroutines de la boucle for semblent entraver la fonctionnalité du programme.
Explorer la cause
Le coupable de ce code réside dans l'existence d'une goroutine nommée Forever qui exécute en continu une boucle for infinie sans pause. Cette action entraîne la consommation complète d'un thread complet du système d'exploitation, interférant efficacement avec les goroutines du runtime.
Résoudre le problème
Pour remédier à cette situation, il est crucial de éliminez la goroutine inutile pour toujours. De plus, l'insertion d'un point de planification dans la boucle for de la fonction show peut restaurer la fonctionnalité du programme.
Code révisé
func show() { for number := 1; number < 999999; number++ { time.Sleep(1000) fmt.Println(number) runtime.Gosched() // Scheduling point to yield control to the runtime } }
Élimination des boucles occupées
Il est essentiel d'éviter les boucles chargées qui manquent de travail productif. Ils consomment inutilement des ressources CPU et s'avèrent préjudiciables aux performances globales des goroutines. Envisagez plutôt d'incorporer des pauses dans la boucle ou de supprimer complètement la boucle pour un comportement optimisé du programme.
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!