Heim >Backend-Entwicklung >Golang >Sind Go-Goroutinen echte Coroutinen?

Sind Go-Goroutinen echte Coroutinen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-15 11:21:12293Durchsuche

Are Go Goroutines True Coroutines?

Ist eine Go-Goroutine eine Coroutine?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn