👨🔧 worker-pool
Go simple async worker pool.
📖 ABOUT
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.
📚 Documentation
For examples visit godoc#pkg-examples
For GoDoc reference, visit pkg.go.dev
🚏 HOW TO USE
🚅 Benchmark
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 3944299 284 ns/op 56 B/op 3 allocs/op
BenchmarkWorker1Parallel-4 7394715 138 ns/op 48 B/op 2 allocs/op
BenchmarkWorker100-4 1657569 693 ns/op 56 B/op 3 allocs/op
BenchmarkWorker100Parallel-4 3673483 368 ns/op 48 B/op 2 allocs/op
BenchmarkWorkerNumCPU-4 2590293 445 ns/op 56 B/op 3 allocs/op
BenchmarkWorkerNumCPUParallel-4 3591553 298 ns/op 48 B/op 2 allocs/op
PASS
ok github.com/vardius/worker-pool/v2 9.511s
🏫 Basic example
package main
import (
"fmt"
"sync"
"github.com/vardius/worker-pool/v2"
)
func main() {
var wg sync.WaitGroup
poolSize := 1
jobsAmount := 3
workersAmount := 2
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() {
wg.Wait()
close(out)
pool.Stop()
}()
sum := 0
for n := range out {
sum += n
}
fmt.Println(sum)
}
This package is released under the MIT license. See the complete license in the package