Cyclone is a go package to spawn, reuse and manage a number of goroutines.
Go Get:
go get github.com/simpleapples/cyclone
Dep:
dep ensure -add github.com/simpleapples/cyclone
size := runtime.NumCPU()
pool := NewWithClosure(int64(size), func(payload interface{}) interface{} {
intV := payload.(int)
fmt.Println(intV)
return intV
})
defer pool.Close()
for i := 0; i < size; i++ {
_, err := pool.Run(i)
}
Parallel jobs:
size := 5
total := 20
wg := sync.WaitGroup{}
pool := NewWithCallback(int64(size), func(payload interface{}) interface{} {
intV := payload.(int)
time.Sleep(1 * time.Second)
return intV
}, func(result interface{}) {
intV := result.(int)
fmt.Println(intV)
wg.Done()
})
for i := 0; i < total; i++ {
wg.Add(1)
pool.Run(i)
}
wg.Wait()
Change pool size:
pool.SetSize(100)
pool.SetSize(10000)