Sobes.tech
Junior — Middle

Go proqramlarının icrası zamanı goroutine'lar yaddaşla necə qarşılıqlı əlaqədədir?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində gorutinalar, Go tərəfindən idarə olunan yüngül iş parçacqlarıdır. Hər bir gorutina özünün kiçik (təxminən 2 KB) və lazım olduqda dinamik olaraq genişlənə bilən yaddaş yığınına malikdir.

Yaddaş ilə qarşılıqlı əlaqə aşağıdakı kimi baş verir:

  • Bütün gorutinalar ümumi yığını (heap) paylaşır, burada dinamik olaraq ayrılmış obyektlər yerləşir.
  • Yaddaş yığını, bütün gorutinalardan gələn istəkləri izləyən çöp toplayıcı tərəfindən idarə olunur.
  • Gorutinalar arasında məlumat ötürmək üçün adətən kanallar (channels) istifadə olunur, bu, yarış şərtləri olmadan təhlükəsiz mübadiləni təmin edir.
  • Hər bir gorutinanın yığını izolyasiya olunmuşdur, bu da onlar arasında effektiv keçid və böyük xərclər olmadan işləmə imkanı verir.

İki gorutinanın kanal vasitəsilə məlumat mübadiləsi etdiyini göstərən nümunə:

func main() {
    ch := make(chan string)

    go func() {
        ch <- "salam gorutindən"
    }()

    msg := <-ch
    fmt.Println(msg)
}

Beləliklə, gorutinalar yığın yaddaşını paylaşır, lakin ayrı yığınlara malikdirlər, bu da effektiv və təhlükəsiz paralel icra təmin edir.