美文网首页
Go 的定时器

Go 的定时器

作者: xiaoyusilen | 来源:发表于2017-09-12 00:33 被阅读0次

这个东西其实早就应该总结一下了,然而一直懒=_=,顺便事情很多,就一直没有总结。为什么需要做一个定时器呢,假设我们现在有个服务,服务过程中需要从 redis 中读取缓存数据,如果缓存数据不存在那么我们读线上数据库,读取完毕之后写入 redis 作为热数据。这个过程中,如果是同步的,很明显,读写缓存的操作是不应该阻塞主要服务的,这时候我们就需要自己做个定时器来做超时机制,防止因为缓存服务的问题而影响主要服务(当然,做成异步是OK的)。

Code Here

// author by @xiaoyusilen

package main

import (
    "fmt"
    "time"
)

func loop() int {

    for i := 0; i < 100; i++ {
        fmt.Println(i)
    }

    return 0
}

func main() {
    ticker := time.Timer(time.Microsecond * 1) // 新建一个定时器,设置超时时间,这里设置的是1微秒
    ch := make(chan *int, 1) // 设置一个 chan 接收服务返回值
    go loop() // 起一个 goroutine 执行服务

    select {
    case <-ch: // 如果收到服务返回值,则说明未超时
        ticker.Stop() // 停止计时器
        return
    case <-ticker.C: // 如果先收到定时器的信号,则说明超时了
        fmt.Println("timeout") // 这里做超时处理
        return
    }
}

这里写的非常简易~可以根据需要自行更改,至于用time.Timer更好还是time.Ticker更好,取决于实际情况,这两个最大的区别在于,time.Ticker不能调用time.After()方法,而且time.Ticker.Stop()调用了stopTimer的方法。这里的超时时间定为1微秒了,为了测试方便并且造成超时的情况,具体的超时时间根据业务需求来决定,通常超时时间不能超过主要服务的平均响应时间。

测试结果如下,可以看到还没有输出完毕就超时了。

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
timeout

好咯,一个简单的定时器就这样完成了~

FYI

godoc-tick

godoc-time/sleep

相关文章

  • 第06天(并发编程)_02

    15_Timer的使用.go 16_通过Timer实现延时功能.go 17_停止和重置定时器.go 18_Tick...

  • golang timer - note

    Go提供了两种定时器,此处分为一次性定时器、周期性定时器。 一次性定时器:定时器只计时一次,结束便停止; 周期性定...

  • dpvs学习笔记: 6 定时器实现及连接老化超时

    定时器实现方式很多种,定时器个数也不同。比如 go 老版本只有一个全局定时器,所以有些高性能项目抛弃了,自己实现用...

  • GO的定时器Timer 和定时任务cron

    GO的定时器Timer 和定时任务cron 上次我们说到了GO 中 swaggo 的应用,咱们来回顾一下 swag...

  • Go 的定时器

    这个东西其实早就应该总结一下了,然而一直懒=_=,顺便事情很多,就一直没有总结。为什么需要做一个定时器呢,假设我们...

  • GO的日志怎么玩?

    GO的日志怎么玩 上次咱们分享了 GO的定时器timer和定时任务 cron,咱们来回顾一下: Timer 是什么...

  • go 定时器

    timer 延时2秒 Ticker select

  • Go语言中的定时器

    定时器 Go的定时器是在经过一段时间后做一些事情,位于标准库的time包。主要是time.Timer, time....

  • Go之定时器的几种玩法

    笔者最近在使用Go的定时器,发现Go提供的time包里面,按照下面几种场景做了区分,并分别提供一些API支持。主要...

  • [转]正确使用Go的Timer

    原文:正确使用GO的Timer我们总是会使用Timer去执行一些定时任务,最近在Go语言的定时器使用上面不小心踩到...

网友评论

      本文标题:Go 的定时器

      本文链接:https://www.haomeiwen.com/subject/kiuqsxtx.html