四时宝库

程序员的知识宝库

golang 定时器详解——Timer和Ticker

定时器: time.Timer

Timer是一个定时器, 代表未来的一个单一事件, 你可以告诉timer你要等待多长时间, 它提供一个channel, 在将来的那个时间那个channel提供了一个时间值。

package main
import (
    "fmt"
    "time"
)
func main() {
    //创建定时器, 2秒后, 定时器就会向自己的C字节发送一个time.Time类型的元素值
    timer1 := time.NewTimer(time.Second * 2)
    t1 := time.Now() //当前时间
    fmt.Printf("t1: %v\n", t1) //显示当前时间
    //2s后, 往timer1.C写数据, 有数据后, 就可以读取
    t2 := <-timer1.C //读取数据
    fmt.Printf("t2: %v\n", t2)
    //如果只是想单纯的等待的话, 可以使用time.Sleep来实现
    timer2 := time.NewTimer(time.Second * 2)
    <-timer2.C
    fmt.Println("2s后")
    time.Sleep(time.Second * 2)
    fmt.Println("再一次2s后")
    <-time.After(time.Second * 2) //定时2s, 阻塞2s, 2s后产生一个事件, 往channel写内容
    fmt.Println("再在一次2s后")
    timer3 := time.NewTimer(time.Second)
    go func() {
        <-timer3.C
        fmt.Println("Timer 3 expired")
    }()
    stop := timer3.Stop() //停止定时器
    if stop {
    fmt.Println("Timer 3 stopped")
    }
    fmt.Println("before")
    timer4 := time.NewTimer(time.Second * 3) //原来设置3s
    timer4.Reset(time.Second * 1) //重新设置时间
    <-timer4.C
    fmt.Println("after")
}

Cron表达式记忆口诀:“分时日月星期,重复任务不再迟。”

最近经常在linux/mac系统中使用自动化脚本的运行,管理定时任务生成报告或数据处理,备份等,crontab工具是个好助手。

crontab是一个Linux/Unix命令,用于安排作业在特定时间间隔内运行。每个用户都可以拥有自己的crontab文件,其中包含命令列表以及执行这些命令的时间。cron表达式成为管理定时任务的理想选择,广泛应用于服务器管理、数据处理等场景。

Go 每日一库之 cron

以下文章来源于GoUpUp ,作者大俊

简介

cron一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果。之前我们也介绍过一个类似的 Go 库——gron。gron代码小巧,用于学习是比较好的。但是它功能相对简单些,并且已经不维护了。如果有定时任务需求,还是建议使用cron。

「源码分享」基于GF(Go Frame)的后台管理系统

今天给大家分享一款基于GF(Go Frame)的后台管理系统 ,完善的权限用户管理,致力于快速高效开发cms系统、督办系统、后续将加入流程审批、工作流引擎、项目管理、挂图作战、数据大屏等功能。

平台简介

微服务实践之分布式定时任务

承接上篇:上篇文章讲到改造 go-zero 生成的 app module 中的 gateway & RPC 。本篇讲讲如何接入 异步任务 以及 log的使用

Delay Job

日常任务开放中,我们会有很多异步、批量、定时、延迟任务要处理,go-zero中有 go-queue

基于 Go 语言的任务调度工具库

#记录我的2024#

Go语言定时器time.Tick,你也可能踩过的坑

遇到问题

最近在处理日志上报kafka时,为防止上报过程中因kafka异常而导致主业务协程阻塞,为此建立了如下日志上报模型:日志主协程负责将消息发给生产者,再由生产者异步写入到broker集群,日志work协程则将收集的日志项通过带缓冲的channel将其传递给日志主协程,从而达到解耦。因日志模型是一对多的关系,为防止work协程长时间等待,为此为每次传递过程设置超时机制,于是在work协程中很容易写出如下代码:

golang cron实现定时任务


1、cron 表达式的基本格式

  用过 linux 的应该对 cron 有所了解。linux 中可以通过 crontab -e 来配置定时任务。不过,linux 中的 cron 只能精确到分钟。而我们这里要讨论的 Go 实现的 cron 可以精确到秒,除了这点比较大的区别外,cron 表达式的基本语法是类似的。(如果使用过 Java 中的 Quartz,对 cron 表达式应该比较了解,而且它和这里我们将要讨论的 Go 版 cron 很像,也都精确到秒) cron(计划任务),顾名思义,按照约定的时间,定时的执行特定的任务(job)。cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示。

java 和 go 的定时器对比


在做监控系统的时候,用到了定时任务来定时获取一些硬件的数据。于是就对比了一下go的定时任务实现和java的定时任务实现。这里只是对比了java的timer和go的time.NewTicker(),time.After().

1. 延时执行的实现

go的用法为:

timer := time.AfterFunc(1*time.Second, Add1)

 	timer.Stop() 

Go语言学习基础-定时器、计时器

Timer计时器

如果希望在将来的某个时间点执行Go代码,或者在某个时间间隔重复执行Go代码,使用Go内置的timer和ticker功能。

先看定时器timer,然后再看计时器ticker。定时器代表未来的单个事件。告诉定时器需要等待多长时间,它返回一个通道,时间到后通道得到通知。如例所示设置定时器将等待2秒,语法<-timer1.C将阻塞定时器的内部通道C,直到定时器向通道发送一个指示定时器触发的值。

<< < 1 2 3 4 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接