Sobes.tech
Junior — Middle

Koje posledice će imati na rad programa postavljanje GOMAXPROCS na 1 i pokretanje beskonačne goroutine?

sobes.tech АИ

Одговор од АИ

Postavljanje GOMAXPROCS na 1 ograničava broj operativnih sistema niti koje Go planer može koristiti na jednu nit. Ako u ovom scenariju pokrenete beskonačnu gorutinu:

  • Svi računi će se izvršavati redom na jednoj niti.
  • Ako beskonačna gorutina ne sadrži tačke gde dolazi do promene konteksta (npr. pozivi blokirajućih operacija ili runtime.Gosched()), druge gorutine možda neće dobiti vreme za izvršenje, što će dovesti do "zamrzavanja" programa.
  • Kao rezultat, program može prestati da odgovara ili da radi veoma sporo, jer planer neće moći efikasno da prebacuje između gorutina.

Primer:

package main

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

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        for {
            // beskonačna petlja bez poziva na runtime.Gosched()
        }
    }()

    time.Sleep(time.Second)
    fmt.Println("Program je završio")
}

U ovom primeru, glavna gorutina možda neće dobiti vreme za izvršenje ako beskonačna gorutina ne prepusti kontrolu, što će dovesti do "zamrzavanja" programa.