Go simple async worker pool.
Contributors:
Want to contribute ? Feel free to send pull requests!
Have problems, bugs, feature ideas? We are using the github issue tracker to manage them.
For examples visit godoc#pkg-examples
For GoDoc reference, visit pkg.go.dev
CPU: 3,3 GHz Intel Core i7
RAM: 16 GB 2133 MHz LPDDR3
➜ worker-pool git:(master) ✗ go test -bench=. -cpu=4 -benchmem
goos: darwin
goarch: amd64
pkg: github.com/vardius/worker-pool/v2
BenchmarkWorker1-4 3435846 358 ns/op 152 B/op 4 allocs/op
BenchmarkWorker1Parallel-4 2993271 403 ns/op 144 B/op 3 allocs/op
BenchmarkWorker100-4 2140670 543 ns/op 152 B/op 4 allocs/op
BenchmarkWorker100Parallel-4 3379311 332 ns/op 144 B/op 3 allocs/op
BenchmarkW
8E18
orkerNumCPU-4 2536502 438 ns/op 152 B/op 4 allocs/op
BenchmarkWorkerNumCPUParallel-4 3061671 353 ns/op 144 B/op 3 allocs/op
PASS
ok github.com/vardius/worker-pool/v2 9.590s
package main
import (
"fmt"
"sync"
"github.com/vardius/worker-pool/v2"
)
func main() {
var wg sync.WaitGroup
poolSize := 1
jobsAmount := 3
workersAmount := 2
// create new pool
pool := workerpool.New(poolSize)
out := make(chan int, jobsAmount)
worker := func(i int) {
defer wg.Done()
out <- i
}
for i := 1; i <= workersAmount; i++ {
if err := pool.AddWorker(worker); err != nil {
panic(err)
}
}
wg.Add(jobsAmount)
for i := 0; i < jobsAmount; i++ {
pool.Delegate(i)
}
go func() {
// stop all workers after jobs are done
wg.Wait()
close(out)
pool.Stop()
}()
sum := 0
for n := range out {
sum += n
}
fmt.Println(sum)
// Output:
// 3
}
📜 License
This package is released under the MIT license. See the complete license in the package