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.