Junior — Middle
Je možná situácia, keď počet vlákien presahuje počet jadier procesora?
sobes.tech AI
Odpoveď od AI
Áno, takáto situácia je možná. V jazyku Go (Golang) môže byť počet goroutine výrazne vyšší ako počet fyzických jadier procesora. Goroutine sú ľahké vlákna spravované runtime prostredím Go, a ich počet môže byť tisíce alebo dokonca milióny, zatiaľ čo počet jadier je zvyčajne obmedzený hardvérom.
Runtime Go plánuje vykonávanie goroutine na dostupných systémových vláknach, ktoré sú naopak rozdelené medzi jadrá procesora. Takže počet goroutine nie je obmedzený počtom jadier, ale len systémovými zdrojmi (pamäťou a časom CPU). To umožňuje efektívne využívanie multitaskingu a paralelizmu.
Príklad:
package main
import (
"fmt"
"time"
)
func worker(id int) {
fmt.Printf("Pracovník %d začal\n", id)
time.Sleep(time.Second)
fmt.Printf("Pracovník %d skončil\n", id)
}
func main() {
for i := 0; i < 1000; i++ {
go worker(i) // Spustí 1000 goroutine
}
time.Sleep(2 * time.Second) // Čaká na dokončenie
}
Tu sú vytvorené 1000 goroutine, čo je oveľa viac ako počet jadier, ale program funguje správne.