Sobes.tech
Junior — Middle

Bir nechta goroutine'larni ketma-ket bajarishni va ular orasida ma'lumotlarni uzatishni qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Go tilida, bir nechta gorutinlarni ketma-ket bajarish va ular orasida ma'lumotlarni uzatish uchun quyidagi usullardan foydalanish mumkin:

  1. Kanal (channels) — gorutinlar orasida ma'lumotlarni uzatish uchun asosiy va eng idiomatik usul. Kanal yaratib, bir gorutina ma'lumot yuboradi, keyingi oladi va ishlov beradi, so'ngra davom ettiradi.
ch1 := make(chan int)
ch2 := make(chan int)

// Birinchi goroutine
go func() {
    ch1 <- 42 // ma'lumot yuborish
}()

// Ikkinchi goroutine
go func() {
    val := <-ch1 // ma'lumot olish
    ch2 <- val * 2
}()

// Asosiy goroutine natijani oladi
result := <-ch2
fmt.Println(result) // 84
  1. WaitGroup + kanallar — gorutinlarning yakunlanishini va ketma-ketlikni nazorat qilish uchun.

  2. Yopilishlar yoki sinxronlashtirilgan tuzilmalar orqali ma'lumotlarni uzatish — kamroq keng tarqalgan, ammo mumkin.

  3. Context (context.Context) dan foydalanish — vaqt davomiyligini boshqarish va bekor qilish uchun, ammo to'g'ridan-to'g'ri ma'lumotlarni uzatish uchun emas.

Kanallar eng oddiy va ishonchli usul bo'lib, ular yordamida gorutinlar orasida ketma-ketlik bilan ma'lumotlarni uzatish tashkil etiladi.