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
runnablegoroutine-lər sırasını saxlayır.
Planlayıcının işləmə prinsipi:
- Goroutine-lər (G) yaradılır və qlobal və ya lokal
runnablesırasına əlavə olunur. - Ə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). - 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.
- M, goroutine-i icra edir.
- 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
runnableolur və sıraya qaytarılır. - Ə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
}