Maison > développement back-end > Golang > Pourquoi mon programme Go se bloque-t-il malgré la configuration de GOMAXPROCS(2) et une utilisation élevée du processeur ?

Pourquoi mon programme Go se bloque-t-il malgré la configuration de GOMAXPROCS(2) et une utilisation élevée du processeur ?

Patricia Arquette
Libérer: 2024-12-11 04:45:14
original
338 Les gens l'ont consulté

Why Does My Go Program Hang Despite Setting GOMAXPROCS(2) and High CPU Usage?

Se bloquer après avoir défini GOMAXPROCS(2)

Vous avez configuré le programme pour autoriser deux threads simultanés à l'aide de runtime.GOMAXPROCS(2). Cependant, le programme rencontre toujours un blocage lors de la sortie des nombres, même si l'utilisation du processeur est élevée.

Le problème survient en raison de la présence d'une boucle occupée dans la fonction Forever(). Une boucle occupée s'exécute en continu sans céder le contrôle au planificateur. Dans ce cas, la fonction Forever() consomme effectivement indéfiniment l'un des threads disponibles.

Ce comportement interfère avec la capacité du planificateur à allouer le thread restant à la fonction show(), c'est pourquoi le programme semble accrocher. La fonction show() introduit également une inefficacité en dormant pendant 1 000 millisecondes entre les itérations.

Solution

Pour résoudre ce problème, vous devez supprimer la boucle occupée du fichier Forever. () et implémentez un point de planification dans la fonction show(). Un point de planification permet au planificateur de reprendre le contrôle périodiquement, garantissant que toutes les goroutines ont la possibilité de s'exécuter.

Voici le code modifié :

func forever() {
    for {
        runtime.Gosched()
    }
}

func show() {
    for number := 1; number < 999999; number++ {
        time.Sleep(1000)
        runtime.Gosched()
        fmt.Println(number)
    }
}
Copier après la connexion

En ajoutant runtime.Gosched() à la fin de la boucle for dans la fonction show(), vous pouvez éliminer le problème et permettre au programme de fonctionner correctement.

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.cn
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