style: 修改 timer.Timer 名字为 timer.Pool
This commit is contained in:
parent
1ae1c8d65c
commit
50181c7ecb
|
@ -0,0 +1,61 @@
|
||||||
|
package timer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/RussellLuo/timingwheel"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewPool 创建一个定时器池,当 tickerPoolSize 小于等于 0 时,将会引发 panic,可指定为 DefaultTickerPoolSize
|
||||||
|
func NewPool(tickerPoolSize int) *Pool {
|
||||||
|
if tickerPoolSize <= 0 {
|
||||||
|
panic(fmt.Errorf("timer tickerPoolSize must greater than 0, got: %d", tickerPoolSize))
|
||||||
|
}
|
||||||
|
return &Pool{
|
||||||
|
tickerPoolSize: tickerPoolSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pool 定时器池
|
||||||
|
type Pool struct {
|
||||||
|
tickers []*Ticker
|
||||||
|
lock sync.Mutex
|
||||||
|
tickerPoolSize int
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangePoolSize 改变定时器池大小
|
||||||
|
// - 当传入的大小小于或等于 0 时,将会返回错误,并且不会发生任何改变
|
||||||
|
func (slf *Pool) ChangePoolSize(size int) error {
|
||||||
|
if size <= 0 {
|
||||||
|
return fmt.Errorf("timer tickerPoolSize must greater than 0, got: %d", tickerPoolSize)
|
||||||
|
}
|
||||||
|
slf.lock.Lock()
|
||||||
|
defer slf.lock.Unlock()
|
||||||
|
slf.tickerPoolSize = size
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetTicker 获取一个新的定时器
|
||||||
|
func (slf *Pool) GetTicker(size int, options ...Option) *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),
|
||||||
|
}
|
||||||
|
for _, option := range options {
|
||||||
|
option(ticker)
|
||||||
|
}
|
||||||
|
ticker.wheel.Start()
|
||||||
|
return ticker
|
||||||
|
}
|
|
@ -11,10 +11,11 @@ import (
|
||||||
|
|
||||||
// Ticker 定时器
|
// Ticker 定时器
|
||||||
type Ticker struct {
|
type Ticker struct {
|
||||||
timer *Timer
|
timer *Pool
|
||||||
wheel *timingwheel.TimingWheel
|
wheel *timingwheel.TimingWheel
|
||||||
timers map[string]*Scheduler
|
timers map[string]*Scheduler
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
|
|
||||||
handle func(name string, caller func())
|
handle func(name string, caller func())
|
||||||
mark string
|
mark string
|
||||||
}
|
}
|
||||||
|
@ -25,7 +26,7 @@ func (slf *Ticker) Mark() string {
|
||||||
return slf.mark
|
return slf.mark
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release 释放定时器,并将定时器重新放回 Timer 池中
|
// Release 释放定时器,并将定时器重新放回 Pool 池中
|
||||||
func (slf *Ticker) Release() {
|
func (slf *Ticker) Release() {
|
||||||
slf.timer.lock.Lock()
|
slf.timer.lock.Lock()
|
||||||
defer slf.timer.lock.Unlock()
|
defer slf.timer.lock.Unlock()
|
||||||
|
|
|
@ -1,74 +1,17 @@
|
||||||
package timer
|
package timer
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/RussellLuo/timingwheel"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
tickerPoolSize = DefaultTickerPoolSize
|
tickerPoolSize = DefaultTickerPoolSize
|
||||||
standardTimer = NewTimer(tickerPoolSize)
|
standardPool = NewPool(tickerPoolSize)
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetTickerPoolSize 设置定时器池大小
|
// SetPoolSize 设置标准池定时器池大小
|
||||||
// - 默认值为 DefaultTickerPoolSize,当定时器池中的定时器不足时,会自动创建新的定时器,当定时器释放时,会将多余的定时器进行释放,否则将放入定时器池中
|
// - 默认值为 DefaultTickerPoolSize,当定时器池中的定时器不足时,会自动创建新的定时器,当定时器释放时,会将多余的定时器进行释放,否则将放入定时器池中
|
||||||
func SetTickerPoolSize(size int) {
|
func SetPoolSize(size int) {
|
||||||
_ = standardTimer.ChangeTickerPoolSize(size)
|
_ = standardPool.ChangePoolSize(size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetTicker 获取标准池中的一个定时器
|
||||||
func GetTicker(size int, options ...Option) *Ticker {
|
func GetTicker(size int, options ...Option) *Ticker {
|
||||||
return standardTimer.NewTicker(size, options...)
|
return standardPool.GetTicker(size, options...)
|
||||||
}
|
|
||||||
|
|
||||||
func NewTimer(tickerPoolSize int) *Timer {
|
|
||||||
if tickerPoolSize <= 0 {
|
|
||||||
panic(fmt.Errorf("timer tickerPoolSize must greater than 0, got: %d", tickerPoolSize))
|
|
||||||
}
|
|
||||||
return &Timer{
|
|
||||||
tickerPoolSize: tickerPoolSize,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Timer struct {
|
|
||||||
tickers []*Ticker
|
|
||||||
lock sync.Mutex
|
|
||||||
tickerPoolSize int
|
|
||||||
}
|
|
||||||
|
|
||||||
// ChangeTickerPoolSize 改变定时器池大小
|
|
||||||
// - 当传入的大小小于或等于 0 时,将会返回错误,并且不会发生任何改变
|
|
||||||
func (slf *Timer) ChangeTickerPoolSize(size int) error {
|
|
||||||
if size <= 0 {
|
|
||||||
return fmt.Errorf("timer tickerPoolSize must greater than 0, got: %d", tickerPoolSize)
|
|
||||||
}
|
|
||||||
slf.lock.Lock()
|
|
||||||
defer slf.lock.Unlock()
|
|
||||||
slf.tickerPoolSize = size
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewTicker 获取一个新的定时器
|
|
||||||
func (slf *Timer) NewTicker(size int, options ...Option) *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),
|
|
||||||
}
|
|
||||||
for _, option := range options {
|
|
||||||
option(ticker)
|
|
||||||
}
|
|
||||||
ticker.wheel.Start()
|
|
||||||
return ticker
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue