Sobes.tech
Middle+

Goroutine-lər necə qurulub və yığımda nə qədər yaddaş tuturlar?

sobes.tech Süni İntellekt

AI-dan cavab

Gorutina — bu yüngül işləmə axini olub, Go icra mühit tərəfindən idarə olunur. Əməliyyat sistemi iplərindən fərqli olaraq, gorutinalar daha az sayda əməliyyat sistemi ipinə multiplex olunur. Bu, daha yaxşı miqyaslana bilmə imkanını təmin edir.

Əsas aspektlər:

  • Planlayıcı (Scheduler): Go icra mühitinin öz planlayıcısı (M:N planlayıcısı) var və gorutinaları (M) məhdud sayda əməliyyat sistemi ipi (N) üzərində idarə edir.
  • Yaddaş Meneceri: Gorutinaların yığınlarını və onların böyüməsini/küçülməsini idarə edir.
  • Əlaqə: Gorutinalar kanallar vasitəsilə əlaqə qurur, bu da məlumat mübadiləsini təhlükəsiz edir və çox vaxt bloklamalar/muteks olmadan həyata keçirilir.

Gorutina yığını:

  • Əvvəlcə, gorutinaların yığınları kiçik olur, adətən 2 KB (Go 1.4-dən əvvəl 4 KB idi).
  • Yığın dinamik olaraq böyüyür və kiçilir. Çoxdursa, avtomatik genişlənir, və yaddaş azaldıqda, kiçilir.
  • Bu dinamik yığın idarəetməsi əməliyyat sistemi iplərinə nisbətən xərcləri azaldır.

Yaddaş istifadəsi:

  • Yaradıldıqda, gorutina adətən 2 KB yaddaş tutar.
  • Yaddaş istifadəsi funksiyaların çağırışları ilə dinamik olaraq arta və geri dönüşlə azala bilər.
  • Maksimum yığın ölçüsü məhduddur, lakin əksər tapşırıqlar üçün kifayət qədər böyükdür (adətən bir neçə MB).
package main

import (
	"fmt"
	"runtime"
	"time"
)

func sayHello() {
	fmt.Println("Gorutindən salam!")
}

func main() {
	// Gorutina yaradılmasının nümayişi
	go sayHello()

	// Gorutinanın işini müşahidə etmək üçün
	time.Sleep(100 * time.Millisecond)

	fmt.Printf("Gorutinaların sayı: %d\n", runtime.NumGoroutine())
}

Bu nümunədə, sayHello ayrı bir gorutina kimi icra olunur. runtime.NumGoroutine() aktiv gorutinaların sayını göstərir (əsas daxil olmaqla).