Junior — Middle
Je možná situace, kdy počet vláken přesahuje počet jader procesoru?
sobes.tech AI
Odpověď od AI
Ano, taková situace je možná. V jazyce Go (Golang) může být počet gorutin výrazně vyšší než počet fyzických jader procesoru. Gorutiny jsou lehké vlákna spravovaná běhovým prostředím Go, a jejich počet může být tisíce nebo dokonce miliony, zatímco počet jader je obvykle omezen hardwarem.
Běhové prostředí Go plánuje vykonávání gorutin na dostupných systémových vláknech, která jsou naopak rozložena mezi jádra procesoru. Tím pádem není počet gorutin omezen počtem jader, ale pouze systémovými zdroji (pamětí a časem procesoru). To umožňuje efektivně využívat multitasking a paralelismus.
Příklad:
package main
import (
"fmt"
"time"
)
func worker(id int) {
fmt.Printf("Dělník %d začal\n", id)
time.Sleep(time.Second)
fmt.Printf("Dělník %d skončil\n", id)
}
func main() {
for i := 0; i < 1000; i++ {
go worker(i) // Spouští 1000 gorutin
}
time.Sleep(2 * time.Second) // Čeká na dokončení
}
Zde je vytvořeno 1000 gorutin, což je mnohem více než počet jader, ale program funguje správně.