ich meine ersten Golang
Anwendung zu realisieren, und ich habe einige Probleme mit MAX CPU & Cores
über die Verwendung, wenn GoRoutines
mit und ich weiß wirklich nicht, warum.Goroutines nicht Verwenden von Max CPU und Cores
Wenn ein Werkzeug wie htop
verwendet wird, wird CPU
nicht mit maximaler Leistung verwendet und nur 1..4 threads
sind zur Zeit aktiv. Auch alle cores
sind aktiv, aber sie sind um 25%-40%
Auslastung.
I verwendet:
func MaxParallelism() int {
maxProcs := runtime.GOMAXPROCS(0)
numCPU := runtime.NumCPU()
if maxProcs < numCPU {
return maxProcs
}
return numCPU
}
Um instanziiert die Anzahl der goroutines
zu bekommen.
Hier ist, wie ich die Anwendung einrichten:
//Common Channel for the goroutines
tasks := make(chan *exec.Cmd, 64)
//Spawning Max Cores Number goroutines (8)
var wg sync.WaitGroup
cores := MaxParallelism()
for i := 0; i < cores; i++ {
wg.Add(1)
go func(num int, w *sync.WaitGroup) {
defer w.Done()
var (
out []byte
err error
)
for cmd := range tasks {
out, err = cmd.Output()
if err != nil {
fmt.Printf("Can't get stdout:", err)
}
. . .
}
}(i, &wg)
}
//Generate Tasks
for i := 0; i < 100000; i++ {
tasks <- exec.Command(cmd1, args...)
tasks <- exec.Command(cmd2, args...)
}
close(tasks)
// wait for the workers to finish
wg.Wait()
Ich teile zwei Screenshots von htop
während die Ausführung der Anwendung
Ich weiß nicht, ob es helfen kann, aber Ich starte es durch Intellij Idea
.
Wie verwende ich Max CPU richtig und Kerne?
Vielen Dank im Voraus.
Warum glauben Sie, dass es nicht genügend CPU-Kerne verwendet? Welches Verhalten erwarten Sie und welches Verhalten beobachten Sie? – Flimzy
Ich teile einen Bildschirm von 'htop' während der Ausführung der Anwendung, damit Sie es verstehen. Im Grunde gibt es nur "1 Thread aktiv" gleichzeitig und alle Kerne werden um 25% verwendet. – AndreaM16
Sie sagen, dass Sie 4 Goroutines laichen. Woher weißt du, dass du 4 bekommst? – user2357112