通过源码分析Golang cron的实现原理

前言

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