Ich teste diesen Code auf meinem VirtualBoxed Ubuntu 11.4
%Vor%Ubuntu hat Zugriff auf alle meine 4 Kerne. Ich überprüfte dies mit gleichzeitiger Ausführung mehrerer ausführbarer Dateien und des Systemmonitors. Aber wenn ich versuche, diesen Code auszuführen, verwendet er nur einen Kern und profitiert nicht von der parallelen Verarbeitung.
Was mache ich falsch?
Sie müssen wahrscheinlich den Abschnitt Parallelität der Go-FAQ überprüfen, insbesondere diese beiden Fragen, und herausfinden, wie es geht welche (wenn nicht beide) für Ihren Fall gelten:
Warum funktioniert mein Multi-Programm nicht? Verwenden Sie mehrere CPUs?
Sie müssen die GOMAXPROCS-Shellumgebung festlegen Variable oder verwenden Sie die gleichnamige Funktion des Laufzeitpakets, um die Laufzeit zu ermöglichen Unterstützung, um mehr als einen Betriebssystem-Thread zu verwenden.
Programme, die eine parallele Berechnung durchführen sollte von einem Anstieg von GOMAXPROCS profitieren. Beachten Sie jedoch, dass Parallelität keine Parallelität ist .
Warum wird GOMAXPROCS & gt; 1 mach mein Programm manchmal langsamer?
Es hängt von der Natur deines ab Programm. Programme, die mehrere enthalten Gouroutines, die viel Zeit verbringen Kommunikation über Kanäle wird Leistungsabfall erfahren bei Verwendung mehrerer Betriebssystem-Threads. Dies ist wegen der signifikanten Context-Switching Strafe beteiligt in Senden von Daten zwischen Threads.
Go's Goroutine-Scheduler ist nicht so so gut wie es sein muss. In Zukunft wird es sollte solche Fälle erkennen und Optimieren Sie die Verwendung von Betriebssystem-Threads. Zum Jetzt sollte GOMAXPROCS auf a gesetzt werden pro Anwendung.
Weitere Informationen zu diesem Thema finden Sie in der Sprechen Sie mit dem Titel Parallelität ist keine Parallelität .
Tags und Links go parallel-processing multicore