Sobes.tech
Junior

Was sind Goroutines?

sobes.tech KI

Antwort von AI

Leichte Ausführungsthreads, die von der Laufzeitumgebung von Go verwaltet werden. Sie werden mit dem Schlüsselwort go vor dem Funktionsaufruf erstellt.

Hauptmerkmale:

  • Weniger Speicherverbrauch: Eine Goroutine beginnt mit einem kleinen Stapel (normalerweise 2 KB), der dynamisch vergrößert oder verkleinert werden kann.
  • Schnellere Erstellung: Das Erstellen einer Goroutine ist viel schneller als das Erstellen eines Systemthreads.
  • Multiplexing auf Systemthreads: Mehrere Goroutines können vom Go-Laufzeitplaner auf eine geringere Anzahl von Systemthreads multiplexiert werden.
  • Kooperative Planung: Goroutines werden nicht preemptiv unterbrochen; sie überlassen freiwillig die Kontrolle an den Planer (z.B. bei blockierenden Aufrufen oder expliziten Aufrufen von runtime.Gosched()).

Beispiel für die Erstellung:

package main

import (
	"fmt"
	"time"
)

func sayHello() {
	fmt.Println("Hallo aus der Goroutine!")
}

func main() {
	go sayHello() // Führt sayHello als Goroutine aus
	fmt.Println("Hallo aus der Hauptfunktion!")
	time.Sleep(1 * time.Second) // Damit die Hauptfunktion nicht vor der Goroutine endet
}

Vergleich mit Threads:

Merkmal Goroutines von Go Betriebssystem-Threads
Steuerung Laufzeitumgebung von Go Betriebssystem
Speicherverbrauch Gering, dynamischer Stack Hoch, fester Stack
Erstellung Schnell Langsam
Planung Kooperativ Preemptiv
Synchronisation Kanäle, sync-Paket Mutexes, Semaphoren des OS