39 lines
626 B
Go
39 lines
626 B
Go
package timer
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/RussellLuo/timingwheel"
|
|
)
|
|
|
|
var timer = new(Timer)
|
|
|
|
func GetTicker(size int) *Ticker {
|
|
return timer.NewTicker(size)
|
|
}
|
|
|
|
type Timer struct {
|
|
tickers []*Ticker
|
|
lock sync.Mutex
|
|
}
|
|
|
|
func (slf *Timer) NewTicker(size int) *Ticker {
|
|
slf.lock.Lock()
|
|
defer slf.lock.Unlock()
|
|
|
|
var ticker *Ticker
|
|
if len(slf.tickers) > 0 {
|
|
ticker = slf.tickers[0]
|
|
slf.tickers = slf.tickers[1:]
|
|
return ticker
|
|
}
|
|
|
|
ticker = &Ticker{
|
|
timer: slf,
|
|
wheel: timingwheel.NewTimingWheel(timingWheelTick, int64(size)),
|
|
timers: make(map[string]*Scheduler),
|
|
}
|
|
ticker.wheel.Start()
|
|
return ticker
|
|
}
|