Sobes.tech
Senior

Wat is een goroutine? Hoe verschilt het van een systeemthread? Vertel over de Go-planner (GMP).

sobes.tech AI

Antwoord van AI

Goroutine is een lichte uitvoeringsstroom in de programmeertaal Go, beheerd door de Go-runtime en niet door het besturingssysteem. In tegenstelling tot een systeemthread hebben goroutines een veel kleinere stackgrootte (begint bij enkele kilobytes en kan dynamisch groeien), waardoor het mogelijk is om duizenden en zelfs miljoenen goroutines gelijktijdig uit te voeren met lage overhead.

Systeemthreads worden gecreëerd en gepland door het besturingssysteem, hebben een vaste grote stack en duurdere contextswitch-operaties.

De Go-scheduler is gebaseerd op het GMP-model:

  • G (goroutine) — de goroutine zelf, uitvoeringsunit.
  • M (machine) — systeemthread (OS-thread) waarop goroutines worden uitgevoerd.
  • P (processor) — logische processor, bron die nodig is om een goroutine op M uit te voeren.

P beheert de wachtrij van goroutines die klaar zijn voor uitvoering (G). M kan slechts één goroutine tegelijk uitvoeren, maar dankzij de aanwezigheid van meerdere M en P verdeelt de scheduler goroutines efficiënt over de systeemthreads, waardoor gelijktijdigheid en parallelisme worden verzekerd.

Deze aanpak stelt Go in staat om systeembronnen efficiënt te gebruiken en te schalen op multiprocessorsystemen.