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.