千家信息网

golang定时任务time.Sleep和time.Tick如何实现

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍"golang定时任务time.Sleep和time.Tick如何实现",在日常操作中,相信很多人在golang定时任务time.Sleep和time.Tick如何实现问题上存在疑惑,
千家信息网最后更新 2025年11月09日golang定时任务time.Sleep和time.Tick如何实现

这篇文章主要介绍"golang定时任务time.Sleep和time.Tick如何实现",在日常操作中,相信很多人在golang定时任务time.Sleep和time.Tick如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"golang定时任务time.Sleep和time.Tick如何实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

总的来说

  • Sleep是使用睡眠完成定时,结束后继续往下执行循环来实现定时任务。

  • Tick函数是使用channel阻塞当前协程,完成定时任务的执行

现在来看一下 两种方法实现出来的效果有何不同

这里我们设置定时时长为5

使用"Do Something" 来模拟定时任务执行需要的时间 分1s执行,10s执行两种情况

代码如下

func Test_Sleep(t *testing.T) {    for i := 0; i < 3; i++ {        Debug("begin", time.Now().Format("2006-01-02_15:04:05"))        Debug("Do something 1s")        time.Sleep(time.Second * 1)        Debug("end", time.Now().Format("2006-01-02_15:04:05"))        time.Sleep(time.Second * 5)    }}func Test_Tick(t *testing.T) {    t1 := time.NewTicker(5 * time.Second)(5 * time.Second)    for {        select {        case <-t1.C:            Debug("begin", time.Now().Format("2006-01-02_15:04:05"))            Debug("Do something 1s")            time.Sleep(time.Second * 1)            Debug("end", time.Now().Format("2006-01-02_15:04:05"))        }    }}

Sleep结果1:

2019/04/19 15:58:51 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:58:51
2019/04/19 15:58:51 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:58:52 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:58:52
2019/04/19 15:58:57 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:58:57
2019/04/19 15:58:57 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:58:58 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:58:58
2019/04/19 15:59:03 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:59:03
2019/04/19 15:59:03 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:59:04 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:59:04

设置任务执行时间为1s
end到下一次begin之间的间隔为5s (定时间隔)
其过程大致为:
|DO–>|Sleep---------->|Do–>|Sleep---------->|

Trick结果1

2019/04/19 16:22:09 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:09
2019/04/19 16:22:09 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:10 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:10
2019/04/19 16:22:14 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:14
2019/04/19 16:22:14 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:15 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:15
2019/04/19 16:22:19 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:19
2019/04/19 16:22:19 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:20 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:20

设置任务执行时间为1s
end到下一次begin之间的间隔为4s (定时间隔-任务执行时间)
其过程大致为:
(begin)Do–>(end)
|DO–>-----------|Do–>-------------|
|Sleep---------->|Sleep---------->|

Sleep结果2:

2019/04/19 16:32:41 |DEBUG|Test_Sleep()|77|begin 2019-04-19_16:32:41
2019/04/19 16:32:41 |DEBUG|Test_Sleep()|78|Do something 10s
2019/04/19 16:32:51 |DEBUG|Test_Sleep()|80|end 2019-04-19_16:32:51
2019/04/19 16:32:56 |DEBUG|Test_Sleep()|77|begin 2019-04-19_16:32:56
2019/04/19 16:32:56 |DEBUG|Test_Sleep()|78|Do something 10s
2019/04/19 16:33:06 |DEBUG|Test_Sleep()|80|end 2019-04-19_16:33:06

设置任务执行时间为10s
end到下一次begin之间的间隔为5s (定时间隔)
其过程大致为:
|DO-------------------->|Sleep---------->|Do-------------------->|Sleep---------->|

Trick结果2

2019/04/19 16:41:05 |DEBUG|Test_Tick()|90|begin 2019-04-19_16:41:05
2019/04/19 16:41:05 |DEBUG|Test_Tick()|91|Do something 10s
2019/04/19 16:41:15 |DEBUG|Test_Tick()|93|end 2019-04-19_16:41:15
2019/04/19 16:41:15 |DEBUG|Test_Tick()|90|begin 2019-04-19_16:41:15
2019/04/19 16:41:15 |DEBUG|Test_Tick()|91|Do something 10s
2019/04/19 16:41:25 |DEBUG|Test_Tick()|93|end 2019-04-19_16:41:25

设置任务执行时间为10s
end到下一次begin之间的间隔为0s
此时因为任务执行时间大于定时间隔 当任务执行完毕时 已经没有阻塞 所以可以立马执行下一次
其过程大致为:
(begin)Do–>(end)
|DO-------------------->|Do----------------------->|
|Sleep---------->-------|Sleep---------->---------|

到此,关于"golang定时任务time.Sleep和time.Tick如何实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

任务 时间 之间 结果 过程 学习 方法 更多 帮助 阻塞 不同 实用 接下来 代码 函数 总的来说 情况 效果 文章 时长 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 连接管理数据库的方法工具 南宁水电费缴费软件开发团队 docker实现数据库共享 我的世界国际版服务器生存服 网易云音乐服务器提示错误 丰田汽车网络技术 舟山云软件开发项目 软件开发环境要求的主要组成 查询数据库第二条数据 江苏省网络安全重点企业 天生不凡架设获取服务器失败 迅博vpn服务器软件 昭化区网络安全委员会 茂名招聘网络安全工程师信息 win7网络安全好就造句 数据库事务的性质 湖南质量软件开发收购价格 滴滴打车司机端软件开发 acdsee数据库设置查询条件 如何减轻数据库压力 服务器电源转接普通机能用吗 密码学与网络安全精讲 网页数据库查询工具 组态王中用什么查询数据库 珠海吹塑零件加工管理软件开发 阿克苏网络技术哪个好 网络安全有哪些常用的技术 谁可以查询金融信息基础数据库 北京服务器公司 金蝶对数据库进行连接
0