Junior — Middle
Kādas sekas tas radīs programmas darbībā, ja GOMAXPROCS tiks iestatīts uz 1 un tiks palaista bezgalīga goroutine?
sobes.tech AI
Atbilde no AI
Iestatot GOMAXPROCS uz 1 ierobežo Go plānotāja izmantoto operētājsistēmas pavedienu skaitu līdz vienam pavedienam. Šajā scenārijā, ja tiek palaista bezgalīga gorutīna:
- Visas aprēķini tiks veikti secīgi vienā pavedienā.
- Ja bezgalīgā gorutīna nesatur punktus, kuros notiek konteksta pārslēgšana (piemēram, bloķējošu operāciju vai
runtime.Gosched()izsaukumu dēļ), citas gorutinas var nesaņemt izpildes laiku, kas novedīs pie programmas "sasalšanas". - Rezultātā programma var pārtraukt atbildēt vai darboties ļoti lēni, jo plānotājs nevar efektīvi pārslēgties starp gorutīnām.
Piemērs:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// bezgalīga cilpa bez `runtime.Gosched()` izsaukuma
}
}()
time.Sleep(time.Second)
fmt.Println("Programma pabeigta")
}
Šajā piemērā galvenā gorutina var nesagaidīt izpildes laiku, ja bezgalīgā gorutina neatsauc kontroli, kas novedīs pie programmas "sasalšanas".