Warum wird die go-Anweisung nicht parallel ausgeführt?

8

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?

    
Odomontois 04.06.2011, 07:03
quelle

1 Antwort

24

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 .

    
Nicholas Knight 04.06.2011, 07:09
quelle