Sobes.tech
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