使用Goroutine结合time.Ticker或time.Sleep可实现Go中定时任务的并发执行,每个任务在独立协程中运行,通过select和context可控制任务生命周期与优雅停止。

在Golang中实现定时任务并发执行,核心是结合 time.Ticker 或 time.Sleep 与 Goroutine。Go 的轻量级协程让多个定时任务可以安全、高效地并行运行。
使用 time.Ticker 启动周期性任务
每个定时任务可以用一个独立的 Goroutine 运行,内部通过 time.NewTicker 控制执行频率。
例如,有两个任务:每2秒打印日志,每5秒检查状态:
func main() { // 任务1:每2秒执行一次 go func() { ticker := time.NewTicker(2 * time.Second) defer ticker.Stop() for range ticker.C { fmt.Println("执行日志记录任务") } }()// 任务2:每5秒执行一次go func() { ticker := time.NewTicker(5 * time.Second) defer ticker.Stop() for range ticker.C { fmt.Println("执行状态检查任务") }}()// 主协程保持运行select {}
}
用 time.Sleep 简化简单场景
如果不需要精确控制或动态启停,for + time.Sleep 更简洁。
go func() { for { fmt.Println("每3秒执行一次") time.Sleep(3 * time.Second) }}()
这种方式适合非关键路径任务,注意 Sleep 是阻塞当前 Goroutine,不影响其他任务。
控制并发与资源安全
多个定时任务可能访问共享资源(如文件、数据库),需注意并发安全。
立即学习“go语言免费学习笔记(深入)”;
使用 sync.Mutex 保护共享变量避免在任务中长时间阻塞,影响调度效率可通过 context.Context 实现优雅停止示例:带取消机制的任务
ctx, cancel := context.WithCancel(context.Background())go func() { ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Println("定时任务运行中...") case <-ctx.Done(): fmt.Println("任务已停止") return } }}()// 某个条件触发后停止任务time.AfterFunc(10*time.Second, cancel)
基本上就这些。Go 的并发模型让定时任务实现变得直观又高效,关键是把每个任务放进独立 Goroutine,再用 Ticker 或 Sleep 控制节奏,同时注意资源同步和退出机制。
以上就是如何在Golang中实现定时任务并发执行的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1412539.html
微信扫一扫
支付宝扫一扫