Junior — Middle
Go dasturlarini bajarishda goroutine'lar qanday qilib xotira bilan o'zaro ta'sir qiladi?
sobes.tech AI
AIdan javob
Go dasturlash tilida gorutinalar — bu Go tomonidan boshqariladigan yengil oqimlar. Har bir gorutina o'zining xotira yordami bilan, dastlab kichik (taxminan 2 KB) va zarur bo'lsa dinamik ravishda kengaytirilishi mumkin.
Xotira bilan o'zaro ta'sir quyidagicha bo'ladi:
- Barcha gorutinalar umumiy yirik (heap) bo'lakni bo share qiladi, unda dinamik tarzda ajratilgan obyektlar joylashadi.
- Heap, barcha gorutinalardan keladigan havolalarni kuzatadigan axlat to'plovchi tomonidan boshqariladi.
- Gorutinalar o'rtasida ma'lumotlarni uzatish uchun odatda kanallar (channels) ishlatiladi, ular xavfsiz almashishni ta'minlaydi va ma'lumotlar urushini oldini oladi.
- Har bir gorutinaning yigi izolyatsiyalangan bo'lib, ular orasida samarali o'tishni va katta xarajatlar olmaysiz bajarilishini ta'minlaydi.
Ikki gorutina kanal orqali ma'lumot almashishini ko'rsatadigan misol:
func main() {
ch := make(chan string)
go func() {
ch <- "gorutindan salom"
}()
msg := <-ch
fmt.Println(msg)
}
Shu tarzda, gorutinalar yirik xotirasini bo'lishadi, ammo alohida yiginlarga ega bo'lib, samarali va xavfsiz parallel bajarilishni ta'minlaydi.