Go并发编程(八)go定时器
2021/5/2 1:25:17
本文主要是介绍Go并发编程(八)go定时器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- Go并发编程(八)go定时器
- 标准定时器timer
- 循环定时器Tick
Go并发编程(八)go定时器
Go的标准包time里提供了两种定时器,一种是标准定时器,另一种是循环定时器。
标准定时器timer
timer在到达指定时间时仅仅触发一次,当timer到期时会将当前时间发送到自己的C管道,timer实例必须通过NewTimer或AfterFunc
timer := time.NewTimer(time.Second * 3)
延迟执行:
第一种实现
time.sleep(3 * time.Second)
使用After模拟超时:After到达指定时间后会向内置C管道发送当前时间
func TestMyTime() { c := make(chan struct{}) go func() { time.Sleep(3 * time.Second) <- c }() // select case可以是发送可以是接收 select { case c <- struct{}{}:fmt.Println("channel") case <- time.After(5 * time.Second):fmt.Println("超时啦") close(c) } }
第二种实现:使用AfterFunc,返回timer对象,可用来关闭定时器
func TestTimeAfterFunc() { c := make(chan struct{}) timer := time.AfterFunc(3 * time.Second, func() { fmt.Println("经过3秒后执行该函数") c <- struct{}{} }) <- c timer.Stop() }
循环定时器Tick
time包中的循环定时器都是永久执行的定时器,直到手动关闭它。time中没有可以指定次数的循环定时器。会根据时间频率不断发送时间到返回的管道
func TestTick() { ticker := time.NewTicker(time.Second * 1) wg := sync.WaitGroup{} wg.Add(10) for t := range ticker.C { fmt.Printf("Backup at %s\n", t) wg.Done() } wg.Wait() }
这篇关于Go并发编程(八)go定时器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享