vRp.CD2g_test/utils/timer/timer.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
}