Heute erzählte mir ein Freund, dass Go-Programme auf mehreren CPU-Kernen skalieren können. Ich war ziemlich überrascht zu hören, dass das Wissen, dass System Task Scheduler nichts über Goroutines wissen und daher nicht auf mehreren Kernen laufen können.Golang, Prozesse und Shared Memory
Ich habe einige Suche und fand heraus, dass Go-Programme mehrere OS-Aufgaben erstellen können, um sie auf verschiedenen Kernen auszuführen (die Nummer wird von GOMAXPROCS Umgebungsvariable gesteuert). Aber soweit ich weiß, führt ein Forking zu einer vollständigen Kopie von Prozessdaten und verschiedenen Prozessen, die in verschiedenen Adressräumen ablaufen.
Was ist also mit globalen Variablen in Go-Programmen? Sind sie sicher mit mehreren Göroutinen zu verwenden? Synchronisieren sie irgendwie zwischen Systemprozessen? Und wenn sie es tun, wie? Ich bin hauptsächlich besorgt über Linux und Freebsd Implementierungen.
[Die offizielle Dokumentation von Goroutines] (https://golang.org/doc/effective_go.html#goroutines) sollte hilfreich sein. – chrk
Sowie [dieser Artikel] (https://www.goinggo.net/2014/01/concurrency-goroutines-and-gomaxprocs.html). – chrk
@chrk, das Problem ist: nicht die offizielle Dokumentation noch der zweite Artikel beleuchten, wie gehen Laufzeit bietet die Synchronisation von gemeinsamen Variablen. Die offizielle Dokumentation besagt: "Eine Goroutine hat ein einfaches Modell: Es ist eine Funktion, die gleichzeitig mit anderen Goroutinen im selben Adressraum ausgeführt wird". Aber sie können nicht im gleichen Adressraum sein, wenn sie sich in verschiedenen Prozessen befinden ... – ea7ababe