Sobes.tech
Junior — Middle

V jakých případech může být úkol spuštěný v goroutine přidán do globální fronty plánovače?

sobes.tech AI

Odpověď od AI

V Go může být úkol, který běží v gorutině, přidán do globové fronty plánovače v následujících případech:

  • Když je gorutina vytvořena pomocí go: Při volání go func() { ... }() je vytvořena nová gorutina a umístěna do globové fronty plánovače k provedení.

  • Pokud je aktuální vlákno (M) zaneprázdněné nebo přetížené: Plánovač může přesunout gorutinu do globové fronty, aby rozdělil zátěž mezi vlákna.

  • Při blokování gorutiny: Pokud gorutina čeká na zdroj (například kanál nebo časovač), může být pozastavena a po odblokování přidána do globové fronty.

  • Když je místní fronta plánovače prázdná: Plánovač může vzít úkoly z globové fronty, aby vyrovnal zátěž.

Příklad spuštění gorutiny:

func main() {
    go func() {
        fmt.Println("Ahoj z gorutiny")
    }()
    time.Sleep(time.Second) // aby gorutina měla čas se vykonat
}

Zde je gorutina ihned přidána do globové fronty plánovače k provedení.