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.