ants/worker_queue.go
2025-01-12 20:50:22 +08:00

46 lines
816 B
Go

package ants
import (
"errors"
"time"
)
// errQueueIsFull will be returned when the worker queue is full.
var errQueueIsFull = errors.New("the queue is full")
type worker interface {
run()
finish()
lastUsedTime() time.Time
setLastUsedTime(t time.Time)
inputFunc(func())
inputArg(any)
}
type workerQueue interface {
len() int
isEmpty() bool
insert(worker) error
detach() worker
refresh(duration time.Duration) []worker // clean up the stale workers and return them
reset()
}
type queueType int
const (
queueTypeStack queueType = 1 << iota
queueTypeLoopQueue
)
func newWorkerQueue(qType queueType, size int) workerQueue {
switch qType {
case queueTypeStack:
return newWorkerStack(size)
case queueTypeLoopQueue:
return newWorkerLoopQueue(size)
default:
return newWorkerStack(size)
}
}