All Projects → vardius → worker-pool

vardius / worker-pool

Licence: MIT license
Go simple async worker pool

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to worker-pool

meesee
Task queue, Long lived workers for work based parallelization, with processes and Redis as back-end. For distributed computing.
Stars: ✭ 14 (-83.53%)
Mutual labels:  worker-pool
workerpool
A workerpool that can get expanded & shrink dynamically.
Stars: ✭ 55 (-35.29%)
Mutual labels:  worker-pool
meteor-cluster
worker pool for meteor using node js native `cluster` module
Stars: ✭ 18 (-78.82%)
Mutual labels:  worker-pool
super-workers
🐴 Distribute load on front-end via parallelism
Stars: ✭ 93 (+9.41%)
Mutual labels:  worker-pool
Ants
🐜🐜🐜 ants is a high-performance and low-cost goroutine pool in Go, inspired by fasthttp./ ants 是一个高性能且低损耗的 goroutine 池。
Stars: ✭ 7,180 (+8347.06%)
Mutual labels:  worker-pool
Bifrost
Golang query-able job queue
Stars: ✭ 27 (-68.24%)
Mutual labels:  worker-pool
gruff
A basic worker pool manager for Erlang to showcase gen_pnet.
Stars: ✭ 23 (-72.94%)
Mutual labels:  worker-pool
workerpoolxt
Concurrency limiting goroutine pool without upper limit on queue length. Extends github.com/gammazero/workerpool
Stars: ✭ 15 (-82.35%)
Mutual labels:  worker-pool
cre
common runtime environment for distributed programming languages
Stars: ✭ 20 (-76.47%)
Mutual labels:  worker-pool
parallelizer
Simplifies the parallelization of function calls.
Stars: ✭ 62 (-27.06%)
Mutual labels:  worker-pool

👨‍🔧 worker-pool

Build Status Go Report Card codecov FOSSA Status license

logo

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

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

FOSSA Status

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].