Popularity
4.1
Stable
Activity
0.0
Stable
89
5
13

Programming language: Go
License: MIT License
Tags: Goroutines    
Latest version: v2.1.0

workerpool alternatives and similar packages

Based on the "Goroutines" category.
Alternatively, view workerpool alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of workerpool or a related project?

Add another 'Goroutines' Package

README

๐Ÿ‘จโ€๐Ÿ”ง worker-pool

Build Status Go Report Card codecov FOSSA Status license

Go simple async worker pool.

๐Ÿ“– ABOUT

Worker pool is a software design pattern for achieving concurrency of task execution. Maintains multiple workers waiting for tasks to be allocated for concurrent execution. By maintaining a pool of workers, the model increases performance and avoids latency in execution. The number of available workers might be tuned to the computing resources available.

You can read more about worker pools in Go here.

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

    // 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++ {
        if err := pool.Delegate(i); err != nil {
            panic(err)
        }
    }

    go func() {
        // stop all workers after jobs are done
        wg.Wait()
        close(out)
        pool.Stop() // stop removes all workers from pool, to resume work add them again
    }()

    sum := 0
    for n := range out {
        sum += n
    }

    fmt.Println(sum)
    // Output:
    // 3
}

๐Ÿ“œ [License](LICENSE.md)

This package is released under the MIT license. See the complete license in the package

FOSSA Status


*Note that all licence references and agreements mentioned in the workerpool README section above are relevant to that project's source code only.