Junior — Middle
Jakie będą konsekwencje dla działania programu przy ustawieniu GOMAXPROCS na 1 i uruchomieniu nieskończonej goroutine?
sobes.tech AI
Odpowiedź od AI
Ustawienie GOMAXPROCS na 1 ogranicza liczbę wątków systemu operacyjnego, które może używać planista Go, do jednego wątku. Jeśli w tym scenariuszu uruchomiona zostanie nieskończona gorutyna:
- Wszystkie obliczenia będą wykonywane kolejno na jednym wątku.
- Jeśli nieskończona gorutyna nie zawiera punktów, w których dochodzi do przełączania kontekstu (np. wywołania operacji blokujących lub
runtime.Gosched()), inne gorutyny mogą nie uzyskać czasu na wykonanie, co spowoduje "zawieszenie" programu. - W efekcie program może przestać odpowiadać lub działać bardzo wolno, ponieważ planista nie będzie mógł efektywnie przełączać się między gorutynami.
Przykład:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// nieskończona pętla bez wywołania runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Program zakończony")
}
W tym przykładzie główna gorutyna może nie uzyskać czasu na wykonanie, jeśli nieskończona gorutyna nie ustępuje kontroli, co spowoduje "zawieszenie" programu.