Sobes.tech
Junior — Middle

Vysvětlete, proč nelze přímo přiřadit počet vláken k počtu gorutin v Go.

sobes.tech AI

Odpověď od AI

V jazyce Go počet gorutin neodpovídá počtu vláken operačního systému, protože gorutiny jsou lehké vlákna řízená běhovým prostředím Go, nikoliv operačním systémem.

Hlavní důvody:

  • Multiplexování: Běhové prostředí Go rozděluje mnoho gorutin na omezený počet systémových vláken a efektivně mezi nimi přepíná.
  • Lehkost: Vytvoření gorutiny vyžaduje mnohem méně zdrojů než vytvoření systémového vlákna.
  • Plánovač Go: Řídí vykonávání gorutin, umožňující tisícům z nich pracovat na více vláknech.

Z tohoto důvodu nelze přímo přiřadit počet gorutin k počtu vláken — obvykle na jedno vlákno připadá mnoho gorutin, což umožňuje efektivní využití zdrojů a zjednodušení konkurenčního programování.

Příklad:

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

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

Zde budou 1000 gorutin pracovat na 4 systémových vláknech.