All checks were successful
Pre Release Workflow / set-release-target (push) Successful in 1s
Pre Release Workflow / build (agent, amd64, linux) (push) Successful in 2m2s
Pre Release Workflow / build (db, amd64, linux) (push) Successful in 1m32s
Pre Release Workflow / build (dhcp, amd64, linux) (push) Successful in 1m32s
Pre Release Workflow / build (metadata, amd64, linux) (push) Successful in 1m33s
Pre Release Workflow / build (metacli, amd64, linux) (push) Successful in 1m40s
Pre Release Workflow / build (subnet, amd64, linux) (push) Successful in 1m37s
Pre Release Workflow / prerelease (push) Successful in 16s
Pre Release Workflow / build (vpc, amd64, linux) (push) Successful in 1m34s
Pre Release Workflow / upload-scripts (run-dnsmasq-in-netns.sh) (push) Successful in 7s
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
33 lines
728 B
Go
33 lines
728 B
Go
package worker
|
|
|
|
import "log"
|
|
|
|
// Task is a function to be executed asynchronously by a worker.
|
|
type Task func()
|
|
|
|
// Queue is a FIFO channel-backed task queue consumed by worker goroutines.
|
|
type Queue struct {
|
|
tasks chan Task
|
|
}
|
|
|
|
// New creates a Queue with the given channel buffer size.
|
|
func New(bufferSize int) *Queue {
|
|
return &Queue{tasks: make(chan Task, bufferSize)}
|
|
}
|
|
|
|
// Submit enqueues a task. Blocks if the queue is full.
|
|
func (q *Queue) Submit(t Task) {
|
|
q.tasks <- t
|
|
}
|
|
|
|
// Start launches n worker goroutines that consume and execute tasks.
|
|
func (q *Queue) Start(n int) {
|
|
log.Printf("worker: starting %d workers", n)
|
|
for i := range n {
|
|
go func(id int) {
|
|
for task := range q.tasks {
|
|
task()
|
|
}
|
|
}(i)
|
|
}
|
|
}
|