Sobes.tech
Junior — Middle

Hogyan lehet ellenőrizni az alkalmazásban az aktív szálak számát?

sobes.tech MI

Válasz az MI-től

Go nyelvben az aktív szálak (goroutine-ok) számának ellenőrzésére általában szinkronizációs és párhuzamosság-korlátozó mechanizmusokat használnak:

  • Bufferelt csatornák mint szemaforok: létrehoznak egy korlátozott kapacitású csatornát, és a goroutine indítása előtt értéket küldenek bele, majd a befejezés után fogadnak egy értéket, így korlátozva a párhuzamosan futó goroutine-ok számát.

  • sync.WaitGroup csomag: segít várni, hogy egy goroutine-csoport befejeződjön, de nem korlátozza azok számát.

  • golang.org/x/sync/semaphore csomag: kényelmes szemafort biztosít a párhuzamosság korlátozására.

Példa egy csatorna-szemafor használatára:

sem := make(chan struct{}, 5) // legfeljebb 5 goroutine egyszerre

for _, task := range tasks {
    sem <- struct{}{} // blokkol, ha már 5 goroutine fut
    go func(t Task) {
        defer func() { <-sem }() // hely felszabadítása
        process(t)
    }(task)
}

// Várunk, amíg minden goroutine be nem fejeződik
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{}
}

Így kontrollálható az aktív szálak száma, és elkerülhető a túlzott erőforrás-felhasználás.