Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zenthangplus/goccm
Limits the number of goroutines that are allowed to run concurrently
https://github.com/zenthangplus/goccm
concurrency golang goroutine
Last synced: 14 days ago
JSON representation
Limits the number of goroutines that are allowed to run concurrently
- Host: GitHub
- URL: https://github.com/zenthangplus/goccm
- Owner: zenthangplus
- License: mit
- Created: 2019-08-16T02:26:53.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-18T03:38:06.000Z (almost 2 years ago)
- Last Synced: 2024-07-31T20:51:54.212Z (3 months ago)
- Topics: concurrency, golang, goroutine
- Language: Go
- Homepage:
- Size: 15.6 KB
- Stars: 69
- Watchers: 2
- Forks: 14
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - goccm - Go Concurrency Manager package limits the number of goroutines that allowed to run concurrently. (Goroutines / Search and Analytic Databases)
- awesome-go-extra - goccm - 08-16T02:26:53Z|2022-08-20T15:35:46Z| (Goroutines / Advanced Console UIs)
README
# Golang Concurrency Manager
[![run tests](https://github.com/zenthangplus/goccm/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/zenthangplus/goccm/actions/workflows/test.yml)
[![codecov](https://codecov.io/gh/zenthangplus/goccm/branch/master/graph/badge.svg)](https://codecov.io/gh/zenthangplus/goccm)
[![goreportcard](https://goreportcard.com/badge/github.com/zenthangplus/goccm)](https://goreportcard.com/report/github.com/zenthangplus/goccm)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/zenthangplus/goccm
```### Example
```go
package mainimport (
"fmt"
"github.com/zenthangplus/goccm"
"time"
)func main() {
// Limit 3 goroutines to run concurrently.
c := goccm.New(3)for i := 1; i <= 10; i++ {
// This function has 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 has to when a goroutine has finished
// Or you can use `defer c.Done()` at the top of goroutine.
c.Done()
}(i)
}// This function has to call to ensure all goroutines have finished
// after close the main program.
c.WaitAllDone()
}
```### List of supported functions
```go
package mainimport "github.com/zenthangplus/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()
}
```