Skip to content
Fast asynchonous goroutine pool for Golang
Branch: master
Clone or download
Latest commit 3d38c07 May 31, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests Fixed comments Jun 27, 2018
LICENSE FC Sep 17, 2017
README.md Update README.md May 31, 2019
logo.png added logo to readme Oct 26, 2017
slavepool.go rename slaves.SlavePool to slave.Pool Aug 1, 2018
slavepool_test.go rename slaves.SlavePool to slave.Pool Aug 1, 2018

README.md

GoSlaves

GoSlaves is a simple golang's library which can handle wide list of tasks asynchronously and safely.

GoDoc Go Report Card

alt text

Installation

$ go get -u -v -x github.com/dgrr/GoSlaves

Benchmark

Note that all of this benchmarks have been implemented as his owners recommends. More of this goroutine pools works with more than 4 goroutines.

After a lot of benchmarks and the following enhancings of the package I got this results:

$ GOMAXPROCS=4 go test -v -bench=. -benchtime=5s -benchmem
goos: linux
goarch: amd64
BenchmarkGrPool-4       	10000000	       715 ns/op	      40 B/op	       1 allocs/op
BenchmarkSlavePool-4    	20000000	       358 ns/op	      16 B/op	       1 allocs/op
BenchmarkTunny-4        	 2000000	      4165 ns/op	      32 B/op	       2 allocs/op
BenchmarkWorkerpool-4   	 3000000	      3023 ns/op	      40 B/op	       1 allocs/op
$ GOMAXPROCS=2 go test -bench=. -benchmem -benchtime=10s
goos: linux
goarch: amd64
BenchmarkGrPool-2      	20000000	       717 ns/op	      40 B/op	       1 allocs/op
BenchmarkSlavePool-2   	100000000	       212 ns/op	      16 B/op	       1 allocs/op
BenchmarkTunny-2       	 5000000	      3142 ns/op	      32 B/op	       2 allocs/op
Library Goroutines Channel buffer
GoSlaves 4 1
GrPool 50 50
Tunny 4 1
Workerpool 4 1

Example

package main

import (
  "fmt"
  "net"

  "github.com/dgrr/GoSlaves"
)

func main() {
  pool := slaves.NewPool(0, func(obj interface{}) {
    conn := obj.(net.Conn)
    fmt.Fprintf(conn, "Welcome to GoSlaves!\n")
    conn.Close()
  })

  ln, err := net.Listen("tcp4", ":8080")
  if err != nil {
    panic(err)
  }

  for {
    conn, err := ln.Accept()
    if err != nil {
      break
    }
    pool.Serve(conn)
  }
}
You can’t perform that action at this time.