Sobes.tech
Middle

İş vaxtı (runtime) nədir və planlayıcı (scheduler) necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da işləmə vaxtı (runtime), Go proqramlarının icra olunduğu mühitdir. O, aşağıdakıları əhatə edir:

  • Yaddaş idarəetməsi: Garbage collector (tullantı toplayıcı) yaddaşın ayrılması və sərbəst buraxılmasını avtomatik idarə edir.
  • Planlayıcı (scheduler): Goroutine-lərin əməliyyat sistemi ipləri üzərində icrasını idarə edir.
  • Sistem çağırışları: Əməliyyat sistemi ilə qarşılıqlı əlaqə üçün interfeys təmin edir.
  • Sinxronizasiya primitives: Kanallar, mutexlər və digər mexanizmlər goroutine-lərin koordinasiyası üçün.

Go planlayıcısı M:N modelini (bir çox goroutine çoxlu əməliyyat sistemi ipi) həyata keçirir. Əsas komponentləri:

  • G (Goroutine): Yüngül icra ipi, əsasən bir funksiyanın abstraksiyası.
  • M (Machine): Go proqramlarının icra olunduğu əməliyyat sistemi ipi.
  • P (Processor): Əməliyyat sistemi ipinə bağlı məntiqi prosessor. O, lokal runnable goroutine-lər sırasını saxlayır.

Planlayıcının işləmə prinsipi:

  1. Goroutine-lər (G) yaradılır və qlobal və ya lokal runnable sırasına əlavə olunur.
  2. Əməliyyat sistemi ipləri (M) məntiqi prosessorlar (P) ilə əlaqələndirilir. P-nin standart sayı CPU nüvələrinin sayına bərabərdir (GOMAXPROCS).
  3. P, öz lokal sırasından goroutine alır. Əgər lokal sıra boşdursa, P digər P-dən və ya qlobal sıradan goroutine oğurlamağa (steal) çalışır.
  4. M, goroutine-i icra edir.
  5. Bir goroutine bloklandıqda (məsələn, məlumat olmayan kanaldan oxuma və ya sistem çağırışında), M P-dən ayrılır və P, başqa bir goroutine icra etmək üçün əlçatan olur. Bloklanan goroutine gözləmə vəziyyətinə qoyulur. Bloklama aradan qaldırıldıqda, goroutine yenidən runnable olur və sıraya qaytarılır.
  6. Əgər M sistem çağırışında bloklanırsa, P-ni saxlamır. Yeni M yaradıla bilər və ya mövcud olan istifadə edilə bilər ki, P digər goroutine-ləri icra etməyə davam edə bilsin.

Bu yanaşma prosessor resurslarından səmərəli istifadə etməyə və paralel tapşırıqları asanlıqla miqyaslandırmağa imkan verir, əməliyyat sistemi iplərinin idarə olunmasının mürəkkəbliyini inkişafçıdan gizlədir.

// Goroutine yaratma nümunəsi
func myFunc() {
	// Goroutine kodu
}

func main() {
	go myFunc() // Goroutine-yi işə salır
	// Əsas proqram paralel olaraq davam edir
}