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), aber htop 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.

InformationsquelleAutor user984260 | 2012-11-05
Schreibe einen Kommentar