Sobes.tech
Junior — Middle

V jakých případech jsou úkoly v goroutines umístěny do společného frontu plánovače výkonu?

sobes.tech AI

Odpověď od AI

V Go jsou úlohy (gorutiny) za těchto okolností umístěny do obecné fronty plánovače (run queue):

  • Když je gorutina vytvořena pomocí go a je připravena k provedení, je zařazena do fronty plánovače.
  • Pokud se gorutina zablokuje (například při operacích vstupu/výstupu, kanálech nebo synchronizaci) a poté odblokuje, vrátí se zpět do fronty.
  • Po dokončení aktuální gorutiny plánovač vybere další z fronty.

Plánovač Go používá model M:N, kde M jsou systémové vlákna a N jsou gorutiny. Existuje mnoho gorutin, které jsou rozděleny mezi vlákna přes fronty. Fronta plánovače je struktura, kde jsou uloženy připravené gorutiny k provedení.

Příklad:

func main() {
    go func() {
        fmt.Println("Gorutina spuštěna")
    }()
    time.Sleep(time.Second) // Čekáme, aby gorutina měla čas se provést
}

Zde je gorutina po vytvoření umístěna do fronty plánovače k provedení.