slaves

package module
v0.0.0-...-3d38c07 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 31, 2019 License: MIT Imports: 1 Imported by: 0

README

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)
  }
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Pool

type Pool struct {
	// contains filtered or unexported fields
}

Pool slaves

func NewPool

func NewPool(workers int, w func(interface{})) (p Pool)

NewPool creates SlavePool.

if workers is 0 default workers will be created use workers var if you know what you are doing

func (*Pool) Close

func (p *Pool) Close()

Close closes the SlavePool

func (*Pool) Serve

func (p *Pool) Serve(w interface{})

Serve sends work to goroutine pool

If all slaves are busy this function will stop until any of this ends a task.

func (*Pool) ServeNonStop

func (p *Pool) ServeNonStop(w interface{}) bool

ServeNonStop returns true if work have been sended to the goroutine pool.

This function returns a state and does not block the workflow.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL