Parallelverarbeitung in Golang: Parallelität für mehr Leistung nutzen
Betrachten Sie den bereitgestellten Code, der die Parallelverarbeitung mit Goroutinen demonstriert. Es wirft jedoch Fragen zum Potenzial der gleichzeitigen Ausführung und zum optimalen Ansatz zur Erzielung von Parallelität auf.
Gleichzeitige Ausführung von Dowork
Die Voraussetzung, dass Dowork parallel ausgeführt wird, ist nicht garantiert. Während Goroutinen einen einfachen Parallelitätsmechanismus bieten, bestimmt der Betriebssystem-Scheduler die tatsächliche Ausführungssequenz. GOMAXPROCS richtet sich gemäß den Versionshinweisen zu Go 1.5 normalerweise nach den verfügbaren Kernen.
Vorgeschlagener Ansatz: Deadlock-Prävention und Parallelitätskontrolle
Bezüglich der Aufrechterhaltung der Ausführung der Hauptfunktion , fmt.Scanln kann unzuverlässig sein, insbesondere in Produktionsumgebungen. Erwägen Sie stattdessen die Implementierung einer sync.WaitGroup, um sicherzustellen, dass alle Goroutinen vor dem Beenden abgeschlossen sind. Um die Parallelitätskontrolle zu verbessern und eine ordnungsgemäße Ressourcennutzung für parallele Aufgaben sicherzustellen, wird außerdem empfohlen, für jede Goroutine separate Dowork-Worker von Kanälen zu verwenden.
Hilfsprogrammfunktion für die parallele Funktionsausführung
Um die parallele Funktionsausführung zu vereinfachen, kann man eine vorhandene Hilfsfunktion wie die folgende nutzen:
import "sync"
// Parallelize parallelizes function calls
func Parallelize(functions ...func()) {
var waitGroup sync.WaitGroup
waitGroup.Add(len(functions))
defer waitGroup.Wait()
for _, function := range functions {
go func(f func()) {
defer waitGroup.Done()
f()
}(function)
}
}
Anwenden dieser Funktion auf das Code-Snippet:
func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3