Junior — Middle
W jakich przypadkach zadania w goroutines są umieszczane w wspólnej kolejce planisty wykonania?
sobes.tech AI
Odpowiedź od AI
W Go zadania (goroutines) są umieszczane w ogólnej kolejce planisty wykonania (run queue) w następujących przypadkach:
- Gdy goroutine jest tworzona za pomocą
goi jest gotowa do wykonania, jest umieszczana w kolejce planisty. - Jeśli goroutine zostanie zablokowana (np. podczas operacji wejścia/wyjścia, na kanałach lub synchronizacji) i potem odblokowana, wraca do kolejki.
- Po zakończeniu bieżącej goroutine, planista wybiera następną z kolejki.
Planista Go używa modelu M:N, gdzie M to wątki systemowe, a N to goroutines. Jest wiele goroutines, które są rozdzielane na wątki przez kolejki. Kolejka planisty to struktura, w której przechowywane są gotowe do wykonania goroutines.
Przykład:
func main() {
go func() {
fmt.Println("Goroutine uruchomiona")
}()
time.Sleep(time.Second) // Czekamy, aby goroutine mogła się wykonać
}
Tutaj, po utworzeniu, goroutine jest umieszczana w kolejce planisty do wykonania.