Sobes.tech
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ą go i 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.