Go 的定時器

這個東西其實早就應(yīng)該總結(jié)一下了虑稼,然而一直懶=_=,順便事情很多势木,就一直沒有總結(jié)蛛倦。為什么需要做一個定時器呢,假設(shè)我們現(xiàn)在有個服務(wù)啦桌,服務(wù)過程中需要從 redis 中讀取緩存數(shù)據(jù)溯壶,如果緩存數(shù)據(jù)不存在那么我們讀線上數(shù)據(jù)庫,讀取完畢之后寫入 redis 作為熱數(shù)據(jù)震蒋。這個過程中茸塞,如果是同步的躲庄,很明顯查剖,讀寫緩存的操作是不應(yīng)該阻塞主要服務(wù)的,這時候我們就需要自己做個定時器來做超時機(jī)制噪窘,防止因為緩存服務(wù)的問題而影響主要服務(wù)(當(dāng)然笋庄,做成異步是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) // 新建一個定時器倔监,設(shè)置超時時間直砂,這里設(shè)置的是1微秒
    ch := make(chan *int, 1) // 設(shè)置一個 chan 接收服務(wù)返回值
    go loop() // 起一個 goroutine 執(zhí)行服務(wù)

    select {
    case <-ch: // 如果收到服務(wù)返回值,則說明未超時
        ticker.Stop() // 停止計時器
        return
    case <-ticker.C: // 如果先收到定時器的信號浩习,則說明超時了
        fmt.Println("timeout") // 這里做超時處理
        return
    }
}

這里寫的非常簡易~可以根據(jù)需要自行更改静暂,至于用time.Timer更好還是time.Ticker更好,取決于實際情況谱秽,這兩個最大的區(qū)別在于洽蛀,time.Ticker不能調(diào)用time.After()方法,而且time.Ticker.Stop()調(diào)用了stopTimer的方法疟赊。這里的超時時間定為1微秒了郊供,為了測試方便并且造成超時的情況,具體的超時時間根據(jù)業(yè)務(wù)需求來決定近哟,通常超時時間不能超過主要服務(wù)的平均響應(yīng)時間驮审。

測試結(jié)果如下,可以看到還沒有輸出完畢就超時了吉执。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戳玫,隨后出現(xiàn)的幾起案子熙掺,更是在濱河造成了極大的恐慌,老刑警劉巖量九,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适掰,死亡現(xiàn)場離奇詭異颂碧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)类浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門载城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人费就,你說我怎么就攤上這事诉瓦。” “怎么了力细?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵睬澡,是天一觀的道長。 經(jīng)常有香客問我眠蚂,道長煞聪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任逝慧,我火速辦了婚禮昔脯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笛臣。我一直安慰自己云稚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布沈堡。 她就那樣靜靜地躺著静陈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诞丽。 梳的紋絲不亂的頭發(fā)上鲸拥,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音率拒,去河邊找鬼崩泡。 笑死,一個胖子當(dāng)著我的面吹牛猬膨,可吹牛的內(nèi)容都是我干的角撞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼勃痴,長吁一口氣:“原來是場噩夢啊……” “哼谒所!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沛申,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤劣领,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铁材,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尖淘,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奕锌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了村生。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊暴。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趁桃,靈堂內(nèi)的尸體忽然破棺而出辽话,到底是詐尸還是另有隱情,我是刑警寧澤卫病,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布油啤,位于F島的核電站,受9級特大地震影響蟀苛,放射性物質(zhì)發(fā)生泄漏益咬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一屹逛、第九天 我趴在偏房一處隱蔽的房頂上張望础废。 院中可真熱鬧,春花似錦罕模、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝶念,卻和暖如春抛腕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媒殉。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工担敌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廷蓉。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓全封,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桃犬。 傳聞我的和親對象是個殘疾皇子刹悴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容