Sobes.tech
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.