前言
golang实现定时任务很简单,只须要简单几步代码即可以完成,最近在做了几个定时任务,想研究一下它内部是怎么实现的,所以将源码过了一遍,记录和分享在此。需要的朋友可以参考以下内容,希望对大家有帮助。
关于go cron是如何使用的可以参考之前的文章:一文带你入门Go语言中定时任务库Cron的使用
Demo示例
通过上面的示例,可以发现, cron 最常用的几个函数:
- New(): 实例化一个 cron 对象。
- Cron.AddFunc(): 向 Cron 对象中添加一个作业,接受两个参数,第一个是 cron 表达式,第二个是一个无参无返回值的函数(作业)。
- Cron.Stop(): 停止调度,Stop 之后不会再有未执行的作业被唤醒,但已经开始执行的作业不会受影响。
源码实现
EntryCron
/robfig/cron/cron.go
结构体 Cron 和 Entry
CronCronEntry IDEntry
New()实现
cron.goNew()Cron
AddFunc()实现
AddFunc() CornfuncJobAddJob()AddFunc() AddJob() AddJob()standardParser.Parse() cron scheduleSchedule()
Schedule()EntryCronentriesCron entryCronadd chanrun()
Start()实现
Start() Cron
通过上面的代码,可以看到主要干了这么几件事:
cronc.runningtruecrongoroutine c.run()
Run()实现
Run()croncronrunc.entriesentryentrygoroutine
Stop()实现
Stop()CronStop()
Remove()实现
Remove() 用于移除一个任务:
小结
到此这篇关于Golang Cron 定时任务的内部实现的文章就介绍到这了, 其中重点如下:
Go CronCronEntrycron.Start()cronc.Run()Run()croncronrunc.entriesentryentrygoroutine