Sobes.tech
Junior — Middle

Bir kanalga bir nechta goroutine bilan bir vaqtning o'zida xabar yuborish mumkinmi?

sobes.tech AI

AIdan javob

Ha, Go tilida bir kanalda bir nechta goroutine’dan bir vaqtning o‘zida xabar yuborish mumkin. Kanallar Go’da oqim xavfsiz va goroutine’lar o‘rtasida sinxronizatsiya ta’minlaydi.

Ammo, quyidagilarni esda tutish muhim:

  • Agar bir nechta goroutine bir kanalda yozayotgan bo‘lsa va hech kim o‘qimasa, bu blokirovkaga olib keladi.
  • Agar kanal bufferli bo‘lsa, yozuvlar faqat buffer to‘lib qolganida bloklanadi.
  • Kanalni ehtiyotkorlik bilan yopish kerak: faqat yuboruvchi uni yopishi kerak, va faqat u ishonch hosil qilgach, yozuvlar tugaganiga.

Misol:

ch := make(chan int)

// Bir nechta goroutine’larni ishga tushirish, ma’lumotlarni kanalga yuborish
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Kanaldan o‘qish
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

Shunday qilib, bir nechta goroutine’dan bir vaqtning o‘zida kanalga yuborish Go’da standart amaliyot hisoblanadi.