You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SizedWaitGroup has the same role and close to the same API as the Golang sync.WaitGroup but it adds a limit on the amount of goroutines started concurrently.
SizedWaitGroup has the same role and API as sync.WaitGroup but it adds a limit of the amount of goroutines started concurrently.
SizedWaitGroup adds the feature of limiting the maximum number of concurrently started routines. It could for example be used to start multiples routines querying a database but without sending too much queries in order to not overload the given database.
Example
package main
import (
"fmt""math/rand""time""github.com/remeh/sizedwaitgroup"
)
funcmain() {
rand.Seed(time.Now().UnixNano())
// Typical use-case:// 50 queries must be executed as quick as possible// but without overloading the database, so only// 8 routines should be started concurrently.swg:=sizedwaitgroup.New(8)
fori:=0; i<50; i++ {
swg.Add()
gofunc(iint) {
deferswg.Done()
query(i)
}(i)
}
swg.Wait()
}
funcquery(iint) {
fmt.Println(i)
ms:=i+500+rand.Intn(500)
time.Sleep(time.Duration(ms) *time.Millisecond)
}
SizedWaitGroup has the same role and close to the same API as the Golang sync.WaitGroup but it adds a limit on the amount of goroutines started concurrently.