Sobes.tech
Junior — Middle

Hoe is de uitvoering van een goroutine verbonden met de processor-threads en hoe wordt deze toegewezen aan een specifieke thread?

sobes.tech AI

Antwoord van AI

In Go zijn goroutines lichte threads die worden beheerd door de Go-runtime, niet direct door het besturingssysteem. Ze worden uitgevoerd binnen OS-threads, maar Go gebruikt een eigen scheduler die veel goroutines verdeelt over een beperkt aantal threads (M — OS-threads).

De toewijzing van een goroutine aan een thread gebeurt via een M:N-model, waarbij M het aantal OS-threads is en N het aantal goroutines. De Go-scheduler wisselt dynamisch de uitvoering van goroutines tussen de threads om de CPU-bronnen efficiënt te gebruiken.

Zo is een goroutine niet gekoppeld aan een specifiek processorthread, maar beslist de Go-scheduler op welk thread en wanneer deze wordt uitgevoerd. Dit maakt het mogelijk om duizenden goroutines uit te voeren met minimale overhead vergeleken met OS-threads.

Voorbeeld:

func main() {
    go func() {
        fmt.Println("Goroutine draait")
    }()
    time.Sleep(time.Second)
}

Hier wordt een goroutine gestart en wijst de Go-scheduler de uitvoering toe aan een van de beschikbare OS-threads.