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í
goa 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í.