goccm

package module
v0.0.0-...-c48e239 Latest Latest
Warning

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

Go to latest
Published: Dec 5, 2020 License: MIT Imports: 1 Imported by: 4

README

Golang Concurrency Manager

Golang Concurrency Manager package limits the number of goroutines that are allowed to run concurrently.

Installation

Run the following command to install this package:

$ go get -u github.com/gboddin/goccm
Example
package main

import (
    "fmt"
    "goccm"
    "time"
)

func main()  {
    // Limit 3 goroutines to run concurrently.
    c := goccm.New(3)
    
    for i := 1; i <= 10; i++ {
    	
        // This function have to call before any goroutine
        c.Wait()
        
        go func(i int) {
            fmt.Printf("Job %d is running\n", i)
            time.Sleep(2 * time.Second)
            
            // This function have to when a goroutine has finished
            // Or you can use `defer c.Done()` at the top of goroutine.
            c.Done()
        }(i)
    }
    
    // This function have to call to ensure all goroutines have finished 
    // after close the main program.
    c.WaitAllDone()
}
List of supported functions
package main

import "goccm"

func main() {
    // Create the concurrency manager
    // The first argument is the maximum number of goroutines to run concurrently.
    c := goccm.New(10)
    
    // Wait until a slot is available for the new goroutine.
    c.Wait()
    
    // Mark a goroutine as finished
    c.Done()
    
    // Wait for all goroutines are done
    c.WaitAllDone()
    
    // Close the manager manually
    c.Close()
    
    // Returns the number of goroutines which are running
    c.RunningCount()
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConcurrencyManager

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

func New

func New(maxGoRoutines int) *ConcurrencyManager

New ConcurrencyManager

func (*ConcurrencyManager) Close

func (c *ConcurrencyManager) Close()

Close the manager manually

func (*ConcurrencyManager) Done

func (c *ConcurrencyManager) Done()

Mark a goroutine as finished

func (*ConcurrencyManager) RunningCount

func (c *ConcurrencyManager) RunningCount() int32

Returns the number of goroutines which are running

func (*ConcurrencyManager) Wait

func (c *ConcurrencyManager) Wait()

Wait until a slot is available for the new goroutine. A goroutine have to start after this function.

func (*ConcurrencyManager) WaitAllDone

func (c *ConcurrencyManager) WaitAllDone()

Wait for all goroutines are done

Jump to

Keyboard shortcuts

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