Sobes.tech
Junior — Middle

Vysvetlite, prečo nie je možné priamo zhodovať počet vlákien s počtom gorutín v Go.

sobes.tech AI

Odpoveď od AI

V jazyku Go početok gorutín ne zodpovedá počtu vlákien operačného systému, pretože gorutiny sú ľahké vlákna spravované runtime-om Go, nie OS.

Hlavné dôvody:

  • Multiplexing: Runtime Go rozdeľuje veľa gorutín na obmedzený počet systémových vlákien a efektívne medzi nimi prepína.
  • Ľahkosť: Vytvorenie gorutiny vyžaduje oveľa menej zdrojov ako vytvorenie systémového vlákna.
  • Plánovač Go: Riadi vykonávanie gorutín, umožňujúc tisícom z nich pracovať na viacerých vláknach.

Preto nie je možné priamo priradiť počet gorutín k počtu vlákien — zvyčajne na jedno vlákno pripadá veľa gorutín, čo umožňuje efektívne využívanie zdrojov a zjednodušuje konkurenčné programovanie.

Príklad:

runtime.GOMAXPROCS(4) // Nastaví počet systémových vlákien

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

Tu budú 1000 gorutín pracovať na 4 systémových vláknach.