Sobes.tech
Junior — Middle

Aké dôsledky bude mať na chod programu nastavenie GOMAXPROCS na 1 a spustenie nekonečnej gorutiny?

sobes.tech AI

Odpoveď od AI

Nastavenie GOMAXPROCS na 1 obmedzuje počet operácií systému, ktoré môže plánovač Go použiť, na jeden vlákno. Ak v tomto scenári spustíte nekonečnú gorutínu:

  • Všetky výpočty budú vykonávané sekvenčne na jednom vlákne.
  • Ak nekonečná gorutína neobsahuje body, kde dochádza ku kontextovým zmenám (napríklad volania blokujúcich operácií alebo runtime.Gosched()), iné gorutiny nemusia získať čas na vykonanie, čo povedie k "zamrznutiu" programu.
  • Výsledkom môže byť, že program prestane reagovať alebo bude veľmi pomaly fungovať, pretože plánovač nebude schopný efektívne prepínať medzi gorutinami.

Príklad:

package main

import (
    "runtime"
    "time"
    "fmt"
)

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for {
            // nekonečný cyklus bez volania runtime.Gosched()
        }
    }()

    time.Sleep(time.Second)
    fmt.Println("Program ukončený")
}

V tomto príklade hlavná gorutina nemusí získať čas na vykonanie, ak nekonečná gorutina neodovzdá kontrolu, čo povedie k "zamrznutiu" programu.