You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.0 KiB
Markdown
50 lines
1.0 KiB
Markdown
# gum
|
|
|
|
Go Unit Manager is a simple Goroutine unit manager for GoLang.
|
|
|
|
|
|
Features:
|
|
|
|
- Scheduling of multiple goroutines.
|
|
- Subscribe to `os.Signal` events.
|
|
- Gracefull shutdown of units
|
|
|
|
|
|
## Overview
|
|
|
|
A unit is a type that implements `WorkUnit` interface. The `Spawn()` method
|
|
of registered units are run in goroutines.
|
|
|
|
The `Manager` handles communication and synchronized shutdown procedure.
|
|
|
|
|
|
## Usage
|
|
|
|
1. Create a unit manager
|
|
2. Implement the `WorkUnit` on your goroutines
|
|
3. Add units to the manager
|
|
4. Start the manager and wait on it's `Quit` channel
|
|
|
|
```golang
|
|
func main() {
|
|
// Create a unit manager
|
|
manager := gum.NewManager()
|
|
|
|
// Subscribe to SIGINT
|
|
manager.SubscribeTo(os.Interrupt)
|
|
|
|
// NewWorker returns a type implementing WorkUnit interface unit :=
|
|
NewWorker()
|
|
|
|
// Register the unit with the manager
|
|
manager.AddUnit(scheduler)
|
|
|
|
// Start the manager
|
|
go manager.Start()
|
|
|
|
|
|
// Wait for all units to shutdown gracefully through their `Shutdown` method
|
|
<-manager.Quit
|
|
}
|
|
```
|