Da es in der Regel sehr wenig Overhead in Bezug auf Speicherbedarf und Setup/Abbaukosten einer Go-Routine ist. Ist es sogar relevant, einen Thread-Arbeitspool (go routine) zu implementieren? Wann würden Sie einen Thread-Pool verwenden, anstatt eine Go-Routine pro Anfrage zu erstellen?Ist das Thread-Pooling für Go relevant?
Antwort
Das Laichen und Halten von vielen Goroutines in Golang ist billig, aber es ist nicht kostenlos.
Auch Sie sollten sich daran erinnern, dass Gorotine selbst sehr billig sein kann, aber gleichzeitig viel Speicher innerhalb von Goroutine-Code zugewiesen werden kann. Sie möchten vielleicht die Anzahl der gleichzeitig laufenden Gatorutins beschränken.
Sie können Semaphore verwenden, um Ressourcen zu begrenzen. Ein anderer Ansatz (eher idiomatisch für go) ist die Verwendung von Ausführungspipelines mit Worker-Pools. Dieses Muster ist sehr gut in golang blog beschrieben.
Ja, es ist relevant. db/sql verwendet einen Pool von Verbindungen zur Datenbank, da für die Herstellung einer neuen Verbindung Zeit benötigt wird.
Dies ist ein wenig off topic - Pooling Datenbankverbindungen ist nicht ganz dasselbe wie Thread-Pooling. –
- 1. Ist für das XML-Deklarationstag die Groß-/Kleinschreibung relevant?
- 2. Keep div Höhe relevant für das Seitenverhältnis
- 3. Aufgabe orientierte Threadpooling
- 4. C# Echter Vorteil von Threadpooling
- 5. Ist x87 FP Stack noch relevant?
- 6. Was ist das beste Idiom für Produzenten/Konsumenten in Go?
- 7. Wie relevant ist die OpenAjax Alliance für den durchschnittlichen Webentwickler?
- 8. Ist die Reihenfolge der Tags für gültiges XML relevant?
- 9. Wie ist semantisches Web für ASP.NET MVC Web Development relevant?
- 10. Ist das Brettspiel "Go" NP abgeschlossen?
- 11. Ist ViewState in ASP.NET MVC relevant?
- 12. Ist DBCP (Apache Commons Datenbankverbindungspooling) noch relevant?
- 13. Ist die CSS-Validierung nicht mehr relevant?
- 14. Ist Inline-Schlüsselwort in MPLab relevant?
- 15. Ist WxWidgets in 2015 noch relevant?
- 16. CSS Underscore Hack für IE - noch relevant?
- 17. Senden von Push-Benachrichtigungen nach Überprüfung, ob es relevant ist
- 18. Ist der Smiley (☺) in @ font-face noch relevant?
- 19. Git-Bibliothek für Go
- 20. Ist die URL-Bestellung in einer XML-Sitemap relevant?
- 21. Go "& ^" Operator, was bedeutet das?
- 22. Sind flüssige Layouts noch relevant?
- 23. Wie relevant sind OO-Entwurfsmuster für die Webentwicklung in PHP?
- 24. Würden die folgenden Klassen für ein Klassendiagramm relevant sein?
- 25. Was ist das "foo. (Bar.Baz)" Ding in Go-Code?
- 26. Was ist das Ruby-Äquivalent von Go Defer?
- 27. Searchkick Ergebnisse sind nicht relevant
- 28. Dynamischer Datenaustausch (DDE) - noch relevant?
- 29. Ist Reihenfolge im XML-Read vom DataContractSerializer relevant?
- 30. Go Namenskonventionen für const
Wenn Sie blockierende IO verwenden, sollten Sie Thread-Pool statt Goroutine verwenden. – ymonad
@ymonad, was meinst du mit IO blockieren? In Go blockiert alles IO, das ist irgendwie der ganze Punkt seines Nebenläufigkeitsmodells. Wenn Sie Datei-IO meinen, die sich intern stark von Netzwerk-IO unterscheidet, dann handelt es sich überhaupt nicht um ein Problem. Es geht um tatsächliche Betriebssystem-Threads, die darauf warten, dass Systemaufrufe zurückgegeben werden. – creker
@crecker Was ich beabsichtigte war, dass so weit wie go's Netzwerk-Bibliothek, die nicht blockierend ist, nutzen Sie den Vorteil von M: N-Thread-Modell von Goroutine, wenn Sie jedoch Systemaufruf verwenden, die IO blockiert, den Go-Scheduler erstellt einen Thread pro Goroutine, daher kann die Verwendung des Thread-Pools eine Option sein. https://groups.google.com/forum/#!topic/golang-nuts/Luje-okL4jI – ymonad