Die Google I/O 2012-Präsentation „Go Concurrency Patterns“ stellt die Frage, ob Goroutinen leichte Threads in der Go-Sprache sind , werden als Coroutinen implementiert.
Coroutine Definition und Vergleich
Eine Coroutine impliziert typischerweise explizite Kontrollübertragungsmechanismen zwischen verschiedenen Coroutinen. Programmierer können programmgesteuert bestimmen, wann eine Coroutine die Ausführung unterbrechen und die Kontrolle an eine andere übergeben soll.
Goroutine-Implementierung
Go-Goroutinen geben im Gegensatz dazu implizit die Kontrolle an einem bestimmten, aber letztendlich unbestimmten Ort ab Punkte. Goroutinen werden beispielsweise angehalten, bevor sie E/A-Vorgänge ausführen oder Daten über Kanäle senden. Dieser Ansatz ermöglicht es Programmierern, sequentielle, schlanke Prozesse zu schreiben, die den Status effektiv teilen.
Implementierungsdetails
Die Implementierung von Goroutinen ähnelt der Funktionsweise der „State Threads“-Bibliothek auf einem niedrigeren Niveau. Go interagiert direkt mit dem Betriebssystemkernel, ohne auf externe Bibliotheken angewiesen zu sein.
Update: Vorgeschlagenes Coroutine-Paket
Im Jahr 2023 schlug Russ Cox ein Standard-Coroutine-Paket für Go vor ein Framework für explizite Kontrollübertragung und kooperative Planung.
Zusätzlich Hinweise
Vor Go 1.14 wurden Goroutinen nicht präventiv geplant, sodass der Kernel Threads jederzeit anhalten konnte. Seit Go 1.14 werden Goroutinen (fast) präventiv geplant, was eine detailliertere Kontrolle über ihre Ausführung ermöglicht.
Das obige ist der detaillierte Inhalt vonSind Go-Goroutinen echte Coroutinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!