Sobes.tech
Junior — Middle

Dasturlash tilida goroutinlarni boshqarish va bajarish uchun qanday asosiy tuzilmalar ishlatiladi?

sobes.tech AI

AIdan javob

Go tilida goroutine’larni boshqarish va bajarish uchun quyidagi asosiy tuzilmalar ishlatiladi:

  • Goroutine’ni ishga tushirish: go kalit so’zi funksiyani chaqirishdan oldin yoziladi va uni alohida goroutine’da bajaradi, masalan:

    go meningFunktsiya()
    

    Bu funksiyani asinxron tarzda bajarishga imkon beradi.

  • Kanal (channels): goroutine’lar o’rtasida sinxronizatsiya va ma’lumot almashish uchun ishlatiladi. Kanal quyidagicha yaratiladi:

    ch := make(chan int)
    

    Ma’lumot yuborish va olish:

    ch <- 42      // yuborish
    val := <-ch   // olish
    

    Kanallar xavfsiz muloqotni ta’minlaydi va ma’lumotlar tayyor bo’lmasa goroutine’ni bloklaydi.

  • sync.WaitGroup: guruh goroutine’lar tugashini kutish uchun ishlatiladi. Misol:

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // goroutine ishlovi
    }()
    wg.Wait() // barcha goroutine’lar tugashini kutamiz
    
  • select: bir nechta kanal operatsiyalarini bir vaqtning o’zida kutishga imkon beradi va tayyor bo’lganini tanlaydi. Misol:

    select {
    case msg := <-ch1:
        fmt.Println("ch1 dan olindi:", msg)
    case ch2 <- 42:
        fmt.Println("ch2 ga yuborildi")
    default:
        fmt.Println("Hech qanday operatsiya tayyor emas")
    }
    

Ushbu tuzilmalar Go’da parallel bajarishni samarali boshlash, sinxronlashtirish va boshqarish imkonini beradi.