Junior — Middle
Jaké důsledky to bude mít na chod programu při nastavení GOMAXPROCS na 1 a spuštění nekonečné gorutiny?
sobes.tech AI
Odpověď od AI
Nastavení GOMAXPROCS na 1 omezuje počet systémových vláken, která může plánovač Go používat, na jedno vlákno. Pokud v tomto scénáři spustíte nekonečnou gorutinu:
- Všechny výpočty budou prováděny sekvenčně na jednom vlákně.
- Pokud nekonečná gorutina neobsahuje body, kde dochází ke změně kontextu (například volání blokujících operací nebo
runtime.Gosched()), jiné gorutiny nemohou získat čas na vykonání, což povede k "zamrznutí" programu. - Výsledkem může být, že program přestane reagovat nebo bude fungovat velmi pomalu, protože plánovač nebude schopen efektivně přepínat mezi gorutinami.
Příklad:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// nekonečná smyčka bez volání runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Program ukončen")
}
V tomto příkladu hlavní gorutina nemusí získat čas na vykonání, pokud nekonečná gorutina nepředá řízení, což povede k "zamrznutí" programu.