Was ist eine Goroutine? Worin unterscheidet sie sich von einem System-Thread? Erkläre den Go-Planer (GMP).
sobes.tech KI
Antwort von AI
Goroutine ist ein leichter Ausführungsthread in der Programmiersprache Go, der vom Go-Laufzeitumfeld und nicht vom Betriebssystem verwaltet wird. Im Gegensatz zu einem System-Thread haben Goroutines eine viel kleinere Stackgröße (beginnt bei wenigen Kilobytes und kann dynamisch wachsen), was es ermöglicht, Tausende und sogar Millionen von Goroutines gleichzeitig mit geringen Overheads auszuführen.
System-Threads werden vom Betriebssystem erstellt und geplant, haben einen festen großen Stack und sind mit teureren Kontextwechsel-Operationen verbunden.
Der Scheduler von Go basiert auf dem GMP-Modell:
- G (goroutine) — die eigentliche Goroutine, Ausführungseinheit.
- M (Maschine) — System-Thread (OS-Thread), auf dem Goroutines ausgeführt werden.
- P (Prozessor) — logischer Prozessor, Ressource, die benötigt wird, um eine Goroutine auf M auszuführen.
P verwaltet die Warteschlange der bereit zur Ausführung stehenden Goroutines (G). M kann nur eine Goroutine auf einmal ausführen, aber durch die Existenz mehrerer M und P verteilt der Scheduler die Goroutines effizient auf die System-Threads, um Konkurrenz und Parallelität zu gewährleisten.
Dieser Ansatz ermöglicht es Go, Systemressourcen effizient zu nutzen und auf Mehrprozessorsystemen zu skalieren.