Sobes.tech
Junior — Middle

Hansı hallarda goroutine-lərdəki tapşırıqlar icra planlayıcısının ümumi növbəsinə yerləşdirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da vəzifələr (goroutinlər) aşağıdakı hallarda ümumi icra planlayıcısının növbəsinə (run queue) yerləşdirilir:

  • go istifadə edilərək yaradılan və icraya hazır olan goroutin, planlayıcının növbəsinə qoyulur.
  • Əgər goroutin bloklanıbsa (məsələn, giriş-çıxış əməliyyatlarında, kanallarda və ya sinxronizasiya zamanı) və sonra blokdan çıxarılırsa, o, yenidən növbəyə qayıdır.
  • Mövcud goroutin tamamlandıqda, planlayıcı növbədən növbəti goroutin-i seçir.

Go planlayıcısı M:N modelini istifadə edir, burada M sistem axınları, N isə goroutinlərdir. Çox sayda goroutin mövcuddur və onlar növbələr vasitəsilə axınlara paylanır. Planlayıcının növbəsi, icraya hazır goroutinləri saxlayan bir strukturdur.

Nümunə:

func main() {
    go func() {
        fmt.Println("Goroutin başladıldı")
    }()
    time.Sleep(time.Second) // Goroutin-in icra olunması üçün gözləyirik
}

Burada, yaradıldıqdan sonra, goroutin icra üçün planlayıcının növbəsinə yerləşdirilir.