Sobes.tech
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.