Sobes.tech
Junior — Middle

Leg uit waarom het niet mogelijk is om het aantal threads rechtstreeks te vergelijken met het aantal goroutines in Go.

sobes.tech AI

Antwoord van AI

In Go komt het aantal goroutines niet overeen met het aantal threads van het besturingssysteem, omdat goroutines lichte threads zijn die worden beheerd door de Go-runtime, niet door het OS.

Belangrijkste redenen:

  • Multiplexing: De Go-runtime verdeelt veel goroutines over een beperkt aantal systeemthreads en schakelt daar efficiënt tussen.
  • Lichtgewicht: Het aanmaken van een goroutine vereist veel minder bronnen dan het aanmaken van een systeemthread.
  • Go-scheduler: Beheert de uitvoering van goroutines, waardoor duizenden ervan op meerdere threads kunnen werken.

Daarom kan het aantal goroutines niet direct worden gekoppeld aan het aantal threads — meestal werken veel goroutines op één thread, wat efficiënt gebruik van bronnen mogelijk maakt en de gelijktijdige programmering vereenvoudigt.

Voorbeeld:

runtime.GOMAXPROCS(4) // Stel het aantal systeemthreads in

for i := 0; i < 1000; i++ {
    go func(id int) {
        fmt.Println("Goroutine", id)
    }(i)
}

Hier werken 1000 goroutines op 4 systeemthreads.