Warum führt die Go-Laufzeit nicht gleichzeitige Anweisungen parallel aus?
Frage:
Ich verwende ein Go-Programm, das nicht mehrere CPU-Kerne nutzt, obwohl ich Zugriff darauf habe. Ich verwende Goroutinen, um gleichzeitige Aufgaben auszuführen, sie werden jedoch nacheinander ausgeführt. Was könnte dieses Verhalten verursachen?
Antwort:
Es gibt zwei mögliche Erklärungen für dieses Problem:
-
GOMAXPROCS-Umgebung Variable: Die Variable GOMAXPROCS steuert die Anzahl der CPUs, die die Go-Laufzeit verwenden darf. Standardmäßig ist diese Variable auf 1 gesetzt, was bedeutet, dass die Laufzeit nur eine einzige CPU verwendet. Um die Parallelverarbeitung zu ermöglichen, müssen Sie GOMAXPROCS auf einen Wert größer als 1 setzen. Sie können dies entweder durch Festlegen der Umgebungsvariablen oder mithilfe der runtime.GOMAXPROCS-Funktion in Ihrem Code tun.
-
Kanalkommunikation: Wenn Ihre Goroutinen viel Zeit damit verbringen, über Kanäle miteinander zu kommunizieren, kann die Verwendung mehrerer CPU-Kerne tatsächlich die Leistung beeinträchtigen. Dies liegt daran, dass die Kanalkommunikation einen Kontextwechsel erfordert, der den Overhead erhöhen kann. In solchen Fällen ist es effizienter, einen einzigen CPU-Kern für alle Goroutinen zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum laufen meine Go-Goroutinen nicht parallel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!