Sobes.tech
Middle+

Wie sind Goroutines aufgebaut und wie viel Speicher nehmen sie im Stack ein?

sobes.tech KI

Antwort von AI

Goroutine ist ein leichter Ausführungsthread, der von der Laufzeitumgebung von Go (runtime) verwaltet wird. Sie werden auf eine geringere Anzahl von Systemthreads (Thread-Pool) multiplexiert.

Hauptkomponenten:

  • Stapel: Jede Goroutine hat einen separaten, erweiterbaren Stapel. Anfangs klein (16KB mit Go 1.4+, früher 8KB), kann sie bei Bedarf vergrößert oder verkleinert werden.
  • Go-Scheduler: Implementiert das M:N-Modell (M Goroutines auf N Systemthreads). Es ist verantwortlich für das Umschalten zwischen Goroutines auf den verfügbaren Systemthreads. Der Wechsel erfolgt bei blockierenden Operationen (Eingabe/Ausgabe, Warten auf Kanal) oder durch expliziten Aufruf runtime.Gosched().
  • Kontext: Enthält einen Zeiger auf den Maschinencode zur Ausführung, einen Zeiger auf den Stapel und andere Metadaten, die vom Scheduler benötigt werden.

Die Anfangsgröße des Goroutine-Stapels seit Go 1.4 beträgt 16KB. Diese Größe ist nicht fest und kann sich dynamisch ändern.