Sobes.tech
Senior

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.