Golang: wie überprüfen Sie die Anzahl der Prozessoren, auf denen ein Go-Programm ausgeführt wird
Ich bin neu in Google Go (Golang). Meine Frage ist im Zusammenhang mit diesem post Was genau hat Laufzeit.Gosched tun?. Die Struktur des Codes ist als unten kopiert. Meine Frage ist, dass, wenn ich ändern Sie die Anzahl der Prozessor in GOMAXPROCS, wie kann ich überprüfen, wie viele Prozessoren ausgeführt wird. Wenn ich 'oben' zeigt.out-Prozess verbraucht 100% oder weniger Ressourcen, auch wenn GOMAXPROCS ist mehr als 1. Ich wäre dankbar für Eure Hilfe.
package main
import (
"fmt"
"runtime"
"sync"
)
var wg sync.WaitGroup
func doTasks() {
fmt.Println(" Doing task ")
for ji := 1; ji < 100000000; ji++ {
for io := 1; io < 10; io++ {
//Some computations
}
}
runtime.Gosched()
wg.Done()
}
func main() {
wg.Add(1)
runtime.GOMAXPROCS(1) //or 2 or 4
go doTasks()
doTasks()
wg.Wait()
}
- Was OS testen diese auf? Es wäre auch hilfreich zu wissen welche CPU Sie verwenden. Ich kann nicht reproduzieren Sie das Verhalten.
- cat /etc/*-release gibt: Red Hat Enterprise Linux Workstation-Version 6.3 (Santiago). OS ist linux. CPU ist Intel(R) Xeon(R) CPU X5460 @ 3.16 GHz. NumCPU Renditen 8.
- Das Programm läuft einwandfrei. Nur ich war neugierig, wie die Anzahl der Prozessoren, auf denen es ausgeführt wird
- Es scheint, dass Ihre geschweifte Klammern sind nicht gepaart (func doTasks() ). Dies ist wichtig, weil der Ort der Laufzeit.Gosched() aufgerufen wird, Fragen...
- Bitte machen Sie einige versuchen zu formatieren Sie Ihren code angemessen. Sie können fügen Sie es in play.golang.org und klicken Sie auf
format
- und es wird dies für Sie tun. Sie werden feststellen, es wird scheitern, weil Ihr den code nicht gültig gehen. Es ist einfacher zu helfen, Sie, wenn Ihr code gültig ist. - Ich bin mir nicht sicher über
top
(ich habe selten berühren Sie in diesen Tagen), aberhtop
standardmäßig zeigt Ihnen alle LWPs (light-weight-Prozesse, das heißt, OS-threads) ausgeführt werden im Rahmen der einzelnen Verfahren. Sicherlich, dass ist nicht die Anzahl der Laufenden threads, aber zumindest würde es geben Ihnen einen Einblick, ob die Go runtime beschlossen, auf einem anderen thread(s) für Ihr Programm. - Danke. Ich habe neu formatiert, den code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die größte Anzahl der logischen CPUs kann der Prozess ausgeführt werden, auf die in einer bestimmten Zeit ist nicht mehr als das minimum von
Laufzeit.GOMAXPROCS(0)
undLaufzeit.NumCPU()
.Die Anzahl der Kerne können erfragt werden, indem http://golang.org/pkg/runtime/#NumCPU.
In der Dokumentation sagt: "NumCPU gibt die Anzahl der logischen CPUs auf dem lokalen Computer."