Heim > Backend-Entwicklung > Golang > Warum hängt mein Go-Programm trotz Einstellung von GOMAXPROCS(2) und hoher CPU-Auslastung?

Warum hängt mein Go-Programm trotz Einstellung von GOMAXPROCS(2) und hoher CPU-Auslastung?

Patricia Arquette
Freigeben: 2024-12-11 04:45:14
Original
339 Leute haben es durchsucht

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

Hängt nach Einstellung von GOMAXPROCS(2)

Sie haben das Programm so konfiguriert, dass zwei gleichzeitige Threads mithilfe von runtime.GOMAXPROCS(2) zulässig sind. Das Programm bleibt jedoch bei der Ausgabe von Zahlen hängen, obwohl die CPU-Auslastung hoch ist.

Das Problem entsteht durch das Vorhandensein einer Busy-Schleife in der Funktion „forever()“. Eine Besetztschleife läuft kontinuierlich, ohne dass die Kontrolle an den Planer abgegeben wird. In diesem Fall verbraucht die Funktion „forever()“ effektiv einen der verfügbaren Threads auf unbestimmte Zeit.

Dieses Verhalten beeinträchtigt die Fähigkeit des Planers, den verbleibenden Thread der Funktion „show()“ zuzuweisen, weshalb das Programm dies scheinbar tut aufhängen. Die Funktion show() führt außerdem zu einer Ineffizienz, da sie zwischen den Iterationen 1000 Millisekunden lang schläft.

Lösung

Um dieses Problem zu beheben, sollten Sie die Besetztschleife aus der ewigen Schleife entfernen ()-Funktion und implementieren Sie einen Planungspunkt innerhalb der show()-Funktion. Ein Planungspunkt ermöglicht es dem Scheduler, die Kontrolle regelmäßig zurückzugewinnen und sicherzustellen, dass alle Goroutinen die Möglichkeit haben, ausgeführt zu werden.

Hier ist der geänderte Code:

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

func show() {
    for number := 1; number < 999999; number++ {
        time.Sleep(1000)
        runtime.Gosched()
        fmt.Println(number)
    }
}
Nach dem Login kopieren

Durch Hinzufügen von runtime.Gosched() at Am Ende der for-Schleife in der Funktion show() können Sie das Problem beheben und dafür sorgen, dass das Programm reibungslos läuft.

Das obige ist der detaillierte Inhalt vonWarum hängt mein Go-Programm trotz Einstellung von GOMAXPROCS(2) und hoher CPU-Auslastung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage