欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 用golang實現一個定時器任務隊列實例

用golang實現一個定時器任務隊列實例

熱門標簽:浙江高頻外呼系統多少錢一個月 惠州電銷防封電話卡 建造者2地圖標注 鄭州亮點科技用的什么外呼系統 汕頭小型外呼系統 阿里云ai電話機器人 釘釘有地圖標注功能嗎 黃岡人工智能電銷機器人哪個好 濱州自動電銷機器人排名

 很有幸得到公司信任,采用新的語言進行一些底層服務的開發,在實現功能的同時,也獲得了一些感悟,因此在這記錄一下,方便自己查看也可以共享給大家。

golang中定時器

golang中提供了2種定時器timer和ticker(如果JS很熟悉的話應該會很了解),分別是一次性定時器和重復任務定時器。

一般用法:

func main() { 
 input := make(chan interface{}) 
 //producer - produce the messages
 go func() {
  for i := 0; i  5; i++ {
   input - i
  }
  input - "hello, world"
 }()
 
 t1 := time.NewTimer(time.Second * 5)
 t2 := time.NewTimer(time.Second * 10)
 
 for {
  select {
  //consumer - consume the messages
  case msg := -input:
   fmt.Println(msg)
 
  case -t1.C:
   println("5s timer")
   t1.Reset(time.Second * 5)
 
  case -t2.C:
   println("10s timer")
   t2.Reset(time.Second * 10)
  }
 }
}

源碼觀察

這個C是啥,我們去源碼看看,以timer為例:

type Timer struct {
 C -chan Time
 r runtimeTimer
}

原來是一個channel,其實有GO基礎的都知道,GO的運算符當出現的->或者-的時候,必然是有一端是指channel。按照上面的例子來看,就是阻塞在一個for循環內,等待到了定時器的C從channel出來,當獲取到值的時候,進行想要的操作。

設計我們的定時任務隊列

我的需求

當時我的需求是這樣,我需要接收到客戶端的請求并產生一個定時任務,會在固定時間執行,可能是一次,也可能是多次,也可能到指定時間自動停止,可能當任務終止的時候,我還要能停止掉。

具體我畫了個流程圖,差不多如下,畫圖水平有限,請見諒。

定義結構

type OnceCron struct {
 tasks []*Task   //任務的列隊
 add chan *Task  //當遭遇到新任務的時候
 remove chan string  //當遭遇到刪除任務的時候
 stop chan struct{}  //當遇到停止信號的時候
 Logger *log.Logger  //日志 
}
type Job interface {
 Run()     //執行接口
}
type Task struct {
  Job  Job   //要執行的任務 
 Uuid string   //任務標識,刪除時用
 RunTime int64   //執行時間
 Spacing int64   //間隔時間
 EndTime int64   //結束時間
 Number int    //總共要次數
}

隊列實現

首先,我們要獲得一個隊列任務

func NewCron() *OnceCron 常規操作,為了節省篇幅,我就不寫出來,具體可以看源碼,貼在了底部。

然后,開始定時器隊列的運行,一般,都會命名為Start。那么就有一個問題,我們剛開始啟動程序的時候,這個時候是沒有任務隊列,那豈不是for{ select{}}在等待個毛毛球?所以,我們需要在Start的時候添加一個默認的任務, 我是這么做的,添加了一個一小時執行一次的重復隊列,防止隊列退出。

func (one *OnceCron) Start() {
 //初始化的時候加入一個一年的長定時器,間隔1小時執行一次
 task := getTaskWithFuncSpacing(3600, time.Now().Add(time.Hour*24*365).Unix() , func() {
 log.Println("It's a Hour timer!")
 }) //為了代碼格式markdown 里面有個括號我改成全角了
 one.tasks = append(one.tasks, task)
 go one.run() //協成執行 防止主進程被阻塞
}

執行部分應該是重點的,我的理解是,分成三部:

  1. 首先獲得一個最先執行的任務
  2. 然后產生一個定時器,用于執行任務
  3. 進行阻塞判斷,獲取我們要進行的操作
func (one *OnceCron) run() {

 for {
    //第一步 獲取任務
 now := time.Now() //獲取到當前時間
 task, key := one.GetTask() //獲取最近的一個任務的執行時間
 i64 := task.RunTime - now.Unix() //任務執行和當前時間的差

 var d time.Duration
 if i64  0 { //如果任務時間已過期,將執行時間改成現在并且利馬執行
 one.tasks[key].RunTime = now.Unix() 
 one.doAndReset(key)
      continue
 } else { //否則,獲取距離執行開始的間隔時間
 d = time.Unix(task.RunTime, 0).Sub(now)
 }
    //第二步 產生定時器
 timer := time.NewTimer(d) 

 //第三步 捕獲定時器或者其他事件
 for {
 select { 
      //當定時器到了執行時間時,執行當前任務并關閉定時器
 case -timer.C:
 one.doAndReset(key)
 if task != nil {
  go task.Job.Run()
  timer.Stop()
 }

 //當外部添加了任務時,關閉當前定時器
 case -one.add:
 timer.Stop()
 //當外部要刪除一個任務時,刪除ID為uuidstr的任務
 case uuidstr := -one.remove:
 one.removeTask(uuidstr)
 timer.Stop()
 //當遇到要關閉整個定時器任務時
 case -one.stop:
 timer.Stop()
 return
 }

 break
 }
 }
}

后記

這個文章純粹為筆記分析類的文章,旨在分析我碰到一個需求是如何通過分析過程來產生我們需要的代碼的。

源碼地址:timing 一個任務隊列

應用地址:一個應用于谷歌消息推送的轉發中間件

參考源碼:GOLANG實現crontab功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Golang定時器的2種實現方法與區別
  • golang定時器和超時的使用詳解
  • Golang 定時器(Timer 和 Ticker),這篇文章就夠了
  • Golang中定時器的陷阱詳解
  • golang中定時器cpu使用率高的現象詳析
  • golang time包下定時器的實現方法
  • Golang 定時器的終止與重置實現

標簽:阿壩 滄州 東營 泰安 昭通 瀘州 晉中 駐馬店

巨人網絡通訊聲明:本文標題《用golang實現一個定時器任務隊列實例》,本文關鍵詞  用,golang,實現,一個,定時器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用golang實現一個定時器任務隊列實例》相關的同類信息!
  • 本頁收集關于用golang實現一個定時器任務隊列實例的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产精品久久久久久一区二区三区| 丁香婷婷综合五月| 性久久久久久久久久久| 欧洲色大大久久| 国产精品久久久久四虎| 国产999精品久久久久久绿帽| 久久精品三级视频| 国产日韩欧美精品综合| 国产美女在线观看一区| 山东少妇露脸刺激对白在线| 久久奇米777| 国产精品自拍一区| 小嫩苞一区二区三区| 国产精品午夜电影| 成人精品在线视频观看| 国产精品老熟女一区二区| 亚洲视频在线观看一区| 91首页免费视频| 欧美视频中文字幕| 爽好多水快深点欧美视频| 强迫凌虐淫辱の牝奴在线观看| 日韩三级中文字幕| 久久精品国产亚洲aⅴ| 亚洲一区 欧美| 国产精品久久久久久久裸模| av不卡在线观看| 欧美亚洲动漫另类| 首页国产欧美日韩丝袜| 在线免费观看日韩av| 国产欧美一区二区三区沐欲| 成人美女视频在线观看| 欧美色国产精品| 日韩**一区毛片| 国产一二三四区在线| 国产精品欧美一区二区三区| 99在线热播精品免费| 欧美伦理影视网| 久久精品国产秦先生| 久久久国产一级片| 亚洲日本免费电影| 99久久免费看精品国产一区| 久久午夜羞羞影院免费观看| 不卡的电视剧免费网站有什么| 欧美日韩一区二区三区视频| 免费日本视频一区| 在线日韩国产网站| 一区二区高清在线| 国产免费看av| 国产精品福利一区二区三区| www男人天堂| 久久综合久久综合九色| 波多野结衣一区二区三区| 欧美一区永久视频免费观看| 国产一区二区主播在线| 欧美在线观看视频在线| 麻豆91精品视频| 欧美最新大片在线看| 免费成人小视频| 久久精品黄色片| 日日夜夜免费精品| 日本精品在线免费观看| 午夜婷婷国产麻豆精品| 亚洲aaa视频| 午夜精品成人在线视频| 色哟哟一一国产精品| 亚洲123区在线观看| 貂蝉被到爽流白浆在线观看 | 91丨porny丨首页| 欧美v日韩v国产v| 99久久婷婷国产综合精品电影| 欧美v日韩v国产v| 91视频观看视频| 国产午夜久久久久| 在线视频 日韩| **性色生活片久久毛片| 一区二区三区伦理片| 一个色综合网站| 福利视频第一页| 日韩成人免费在线| 91精品1区2区| 国产精品一品二品| 欧美一区二区三区的| 99视频精品全部免费在线| 久久色.com| 亚洲av成人片无码| 亚洲三级电影全部在线观看高清| 亚洲精品国产熟女久久久| 亚洲6080在线| 在线免费av一区| 国产精品一区二区黑丝| 91天堂素人约啪| 日本aⅴ亚洲精品中文乱码| av2014天堂网| 久久久久久9999| 99亚偷拍自图区亚洲| 日韩午夜在线播放| 波多野洁衣一区| 国产一区二区在线视频| 国产人与禽zoz0性伦| 日韩va亚洲va欧美va久久| 91人妻一区二区三区蜜臀| 手机在线免费看毛片| 美女爽到高潮91| 欧美精品日韩综合在线| 91丨九色丨国产丨porny| 国产精品乱码人人做人人爱| 四虎成人免费影院| 久久99精品视频| 日韩免费性生活视频播放| 中文字幕视频观看| 亚洲夂夂婷婷色拍ww47| 日本道在线观看一区二区| 粉嫩13p一区二区三区| 国产欧美一区二区精品忘忧草| 波多野结衣av在线观看| 七七婷婷婷婷精品国产| 欧美一区二区观看视频| 最新版天堂资源在线| 亚洲一区中文日韩| 欧美色图激情小说| 色综合久久久无码中文字幕波多| 亚洲男人的天堂网| 在线一区二区三区四区五区 | 精品粉嫩超白一线天av| 国产伦精品一区二区三区88av| 亚洲精品中文在线| 在线免费观看日本一区| 91啦中文在线观看| 亚洲一区二区三区四区五区黄| 欧美午夜精品一区二区三区| 91麻豆.com| 亚洲一区二区三区四区五区黄| 欧美日韩精品系列| 成人午夜精品无码区| 亚欧色一区w666天堂| 欧美一区二区在线播放| 大黑人交xxx极品hd| 美女国产一区二区| 国产欧美一区视频| 免费在线观看一级片| 99久久精品国产精品久久| 一区二区三区中文字幕精品精品| 精品视频一区 二区 三区| 性色av蜜臀av浪潮av老女人| 美美哒免费高清在线观看视频一区二区 | 日韩一区二区三区四区| 熟妇高潮精品一区二区三区| 久久精品国产99久久6| 久久久精品综合| 丰满少妇被猛烈进入一区二区| 91在线视频免费观看| 午夜精品免费在线| 精品国产三级a在线观看| 老司机精品视频导航| 精品欧美一区二区久久| 国产一二三四视频| 99re这里只有精品6| 亚洲gay无套男同| 久久久噜噜噜久久中文字幕色伊伊 | 无码人妻精品一区二区三区99不卡| 亚洲成人免费影院| 欧美精品一区二区三区久久久 | 免费观看a级片| 国产福利91精品一区| 亚洲激情综合网| 欧美一卡二卡三卡四卡| 亚洲综合第一区| 99这里只有精品| 免费高清不卡av| 中文字幕一区二区三中文字幕| 精品视频123区在线观看| 自拍偷拍中文字幕| 成人一区二区视频| 亚洲国产欧美在线| 久久蜜桃av一区二区天堂 | 在线免费不卡视频| 一区二区三区免费在线观看视频| 国产乱码精品1区2区3区| 亚洲精品高清视频在线观看| 欧美第一区第二区| 国产这里有精品| 亚洲第一黄色网址| 丁香另类激情小说| 日日夜夜精品视频天天综合网| 日本一区二区三级电影在线观看| 欧美色倩网站大全免费| 欧美黄色高清视频| 麻豆传媒在线看| 国内精品免费**视频| 亚洲福利电影网| 欧美激情在线观看视频免费| 欧美视频一区在线| 林心如三级全黄裸体| 午夜不卡久久精品无码免费| 国产一区二区三区最好精华液| 亚洲综合清纯丝袜自拍| 国产视频亚洲色图| 日韩三级中文字幕| 欧美在线视频日韩| av在线免费播放网址|