Sobes.tech
Junior — Middle

Ilovada dasturda faol oqimlar sonini qanday nazorat qilish mumkin?

sobes.tech AI

AIdan javob

Go tilida faol bo'lgan oqimlar sonini (goroutinlarni) nazorat qilish uchun odatda sinxronizatsiya va parallelizmni cheklash mexanizmlari qo'llaniladi:

  • Semafor sifatida bufferli kanallar: cheklangan sig'imga ega kanal yaratib, goroutinani boshlashdan oldin unga qiymat yuboriladi, va tugagach, qabul qilinadi, shunday qilib, bir vaqtning o'zida ishlayotgan goroutinalar soni cheklanadi.

  • sync.WaitGroup paketi: goroutinlar guruhining tugashini kutishga yordam beradi, lekin ularning sonini chekmaydi.

  • golang.org/x/sync/semaphore paketi: paralellikni cheklash uchun qulay semafor taqdim etadi.

Semafoor kanalidan foydalanish misoli:

sem := make(chan struct{}, 5) // maksimal 5 goroutin

for _, task := range tasks {
    sem <- struct{}{} // agar 5 ta goroutin ishlayotgan bo'lsa, bloklanadi
    go func(t Task) {
        defer func() { <-sem }() // joyni bo'shatadi
        process(t)
    }(task)
}

// Barcha goroutinlar tugashini kutamiz
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{}
}

Shu tarzda, faol oqimlar sonini nazorat qilish va resurslardan ortiqcha foydalanishni oldini olish mumkin.