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 |