Documentation ¶
Overview ¶
Package gtimer implements Hierarchical Timing Wheel for interval/delayed jobs running and management.
This package is designed for management for millions of timing jobs. The differences between gtime and gcron are as follows: 1. gcron is implemented based on gtimer. 2. gtimer is designed for high performance and for millions of timing jobs. 3. gcron supports pattern grammar like linux crontab. 4. gtimer's benchmark OP is measured in nanoseconds, and gcron's benchmark OP is measured in microseconds.
Note the common delay of the timer: https://github.com/golang/go/issues/14410
Index ¶
- Constants
- func DelayAdd(delay time.Duration, interval time.Duration, job JobFunc)
- func DelayAddEntry(delay time.Duration, interval time.Duration, job JobFunc, singleton bool, ...)
- func DelayAddOnce(delay time.Duration, interval time.Duration, job JobFunc)
- func DelayAddSingleton(delay time.Duration, interval time.Duration, job JobFunc)
- func DelayAddTimes(delay time.Duration, interval time.Duration, times int, job JobFunc)
- func Exit()
- func SetInterval(interval time.Duration, job JobFunc)
- func SetTimeout(delay time.Duration, job JobFunc)
- type Entry
- func Add(interval time.Duration, job JobFunc) *Entry
- func AddEntry(interval time.Duration, job JobFunc, singleton bool, times int, status int) *Entry
- func AddOnce(interval time.Duration, job JobFunc) *Entry
- func AddSingleton(interval time.Duration, job JobFunc) *Entry
- func AddTimes(interval time.Duration, times int, job JobFunc) *Entry
- func (entry *Entry) Close()
- func (entry *Entry) IsSingleton() bool
- func (entry *Entry) Run()
- func (entry *Entry) SetSingleton(enabled bool)
- func (entry *Entry) SetStatus(status int) int
- func (entry *Entry) SetTimes(times int)
- func (entry *Entry) Start()
- func (entry *Entry) Status() int
- func (entry *Entry) Stop()
- type JobFunc
- type Timer
- func (t *Timer) Add(interval time.Duration, job JobFunc) *Entry
- func (t *Timer) AddEntry(interval time.Duration, job JobFunc, singleton bool, times int, status int) *Entry
- func (t *Timer) AddOnce(interval time.Duration, job JobFunc) *Entry
- func (t *Timer) AddSingleton(interval time.Duration, job JobFunc) *Entry
- func (t *Timer) AddTimes(interval time.Duration, times int, job JobFunc) *Entry
- func (t *Timer) Close()
- func (t *Timer) DelayAdd(delay time.Duration, interval time.Duration, job JobFunc)
- func (t *Timer) DelayAddEntry(delay time.Duration, interval time.Duration, job JobFunc, singleton bool, ...)
- func (t *Timer) DelayAddOnce(delay time.Duration, interval time.Duration, job JobFunc)
- func (t *Timer) DelayAddSingleton(delay time.Duration, interval time.Duration, job JobFunc)
- func (t *Timer) DelayAddTimes(delay time.Duration, interval time.Duration, times int, job JobFunc)
- func (t *Timer) Start()
- func (t *Timer) Stop()
Examples ¶
Constants ¶
const ( STATUS_READY = 0 // Job is ready for running. STATUS_RUNNING = 1 // Job is already running. STATUS_STOPPED = 2 // Job is stopped. STATUS_CLOSED = -1 // Job is closed and waiting to be deleted. )
Variables ¶
This section is empty.
Functions ¶
func DelayAddEntry ¶
func DelayAddEntry(delay time.Duration, interval time.Duration, job JobFunc, singleton bool, times int, status int)
DelayAddEntry adds a timing job after delay of <interval> duration. Also see AddEntry.
func DelayAddOnce ¶
DelayAddOnce adds a timing job after delay of <interval> duration. Also see AddOnce.
func DelayAddSingleton ¶
DelayAddSingleton adds a timing job after delay of <interval> duration. Also see AddSingleton.
func DelayAddTimes ¶
DelayAddTimes adds a timing job after delay of <interval> duration. Also see AddTimes.
func Exit ¶
func Exit()
Exit is used in timing job, which exits and marks it closed from timer. The timing job will be removed from timer later.
func SetInterval ¶
SetInterval runs the job every duration of <delay>. It is like the one in javascript.
func SetTimeout ¶
SetTimeout runs the job once after duration of <delay>. It is like the one in javascript.
Types ¶
type Entry ¶
type Entry struct {
// contains filtered or unexported fields
}
Entry is the timing job entry to wheel.
func Add ¶
Add adds a timing job to the default timer, which runs in interval of <interval>.
Example ¶
package main import ( "fmt" "time" "github.com/gogf/gf/os/gtimer" ) func main() { now := time.Now() interval := 1400 * time.Millisecond gtimer.Add(interval, func() { fmt.Println(time.Now(), time.Duration(time.Now().UnixNano()-now.UnixNano())) now = time.Now() }) select {} }
Output:
func AddEntry ¶
AddEntry adds a timing job to the default timer with detailed parameters.
The parameter <interval> specifies the running interval of the job.
The parameter <singleton> specifies whether the job running in singleton mode. There's only one of the same job is allowed running when its a singleton mode job.
The parameter <times> specifies limit for the job running times, which means the job exits if its run times exceeds the <times>.
The parameter <status> specifies the job status when it's firstly added to the timer.
func AddOnce ¶
AddOnce is a convenience function for adding a job which only runs once and then exits.
func AddSingleton ¶
AddSingleton is a convenience function for add singleton mode job.
func (*Entry) Close ¶
func (entry *Entry) Close()
Close closes the job, and then it will be removed from the timer.
func (*Entry) IsSingleton ¶
IsSingleton checks and returns whether the job in singleton mode.
func (*Entry) SetSingleton ¶
SetSingleton sets the job singleton mode.
type Timer ¶
type Timer struct {
// contains filtered or unexported fields
}
Timer is a Hierarchical Timing Wheel manager for timing jobs.
func New ¶
New creates and returns a Hierarchical Timing Wheel designed timer. The parameter <interval> specifies the interval of the timer. The optional parameter <level> specifies the wheels count of the timer, which is gDEFAULT_WHEEL_LEVEL in default.
func (*Timer) AddEntry ¶
func (t *Timer) AddEntry(interval time.Duration, job JobFunc, singleton bool, times int, status int) *Entry
AddEntry adds a timing job to the timer with detailed parameters.
The parameter <interval> specifies the running interval of the job.
The parameter <singleton> specifies whether the job running in singleton mode. There's only one of the same job is allowed running when its a singleton mode job.
The parameter <times> specifies limit for the job running times, which means the job exits if its run times exceeds the <times>.
The parameter <status> specifies the job status when it's firstly added to the timer.
func (*Timer) AddOnce ¶
AddOnce is a convenience function for adding a job which only runs once and then exits.
func (*Timer) AddSingleton ¶
AddSingleton is a convenience function for add singleton mode job.
func (*Timer) AddTimes ¶
AddTimes is a convenience function for adding a job which is limited running times.
func (*Timer) DelayAdd ¶
DelayAdd adds a timing job after delay of <interval> duration. Also see Add.
func (*Timer) DelayAddEntry ¶
func (t *Timer) DelayAddEntry(delay time.Duration, interval time.Duration, job JobFunc, singleton bool, times int, status int)
DelayAddEntry adds a timing job after delay of <interval> duration. Also see AddEntry.
func (*Timer) DelayAddOnce ¶
DelayAddOnce adds a timing job after delay of <interval> duration. Also see AddOnce.
func (*Timer) DelayAddSingleton ¶
DelayAddSingleton adds a timing job after delay of <interval> duration. Also see AddSingleton.
func (*Timer) DelayAddTimes ¶
DelayAddTimes adds a timing job after delay of <interval> duration. Also see AddTimes.