Junior
Wat zijn goroutines?
sobes.tech AI
Antwoord van AI
Lichte uitvoeringsstromen, beheerd door de Go-runtime-omgeving. Ze worden gemaakt met het sleutelwoord go vóór het aanroepen van een functie.
Belangrijkste kenmerken:
- Minder geheugenverbruik: Een goroutine begint met een kleine stackgrootte (meestal 2 KB), die dynamisch kan worden vergroot of verkleind.
- Snellere creatie: Het maken van een goroutine is veel sneller dan het maken van een systeemthread.
- Multiplexering op systeemthreads: Meerdere goroutines kunnen worden gemultiplexeerd op een kleiner aantal systeemthreads door de Go-planner.
- Coöperatieve planning: Goroutines worden niet preemptief onderbroken; ze geven vrijwillig de controle aan de planner (bijvoorbeeld bij blokkerende oproepen of expliciete aanroepen van
runtime.Gosched()).
Voorbeeld van creatie:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hallo vanaf de goroutine!")
}
func main() {
go sayHello() // Voert sayHello uit als goroutine
fmt.Println("Hallo vanaf de hoofdfunctie!")
time.Sleep(1 * time.Second) // Zodat de hoofdfunctie niet eerder eindigt dan de goroutine
}
Vergelijking met threads:
| Kenmerk | Go goroutines | OS-threads |
|---|---|---|
| Beheer | Go-runtime-omgeving | Besturingssysteem |
| Geheugengebruik | Laag, dynamische stack | Hoog, vaste stack |
| Creatie | Snel | Traag |
| Planning | Coöperatief | Preemptief |
| Synchronisatie | Kanalen, sync-pakket | Mutexen, semaforen van OS |