主頁(yè) > 知識(shí)庫(kù) > 基于golang channel實(shí)現(xiàn)的輕量級(jí)異步任務(wù)分發(fā)器示例代碼

基于golang channel實(shí)現(xiàn)的輕量級(jí)異步任務(wù)分發(fā)器示例代碼

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

前言

有時(shí)候我們?yōu)榱烁玫睦糜?jì)算機(jī)資源,可以把一些耗時(shí)長(zhǎng)的任務(wù)隊(duì)列化異步執(zhí)行。舉個(gè)對(duì)應(yīng)簡(jiǎn)單的生活中例子就是大多數(shù)餐廳里面點(diǎn)菜都是先找地方做,看了菜單選好菜之后找服務(wù)員點(diǎn)菜,此時(shí)再等待菜做好送上來(lái)。這里餐廳廚房就是計(jì)算機(jī)的底層資源,菜就是待執(zhí)行的任務(wù),而服務(wù)員就是我們的go channel。

關(guān)于消息隊(duì)列有很多好用的框架,如nsq,nats,kafka等等。但有時(shí)我們只需要輕量級(jí)的異步任務(wù)工具,而不需要太過(guò)于"復(fù)雜"的框架相對(duì)于我們的需求來(lái)說(shuō)。于是借鑒一些項(xiàng)目框架,做了一個(gè)小小的封裝。

項(xiàng)目地址: https://github.com/chenhg5/go...  (本地下載)

go-task的使用很簡(jiǎn)單,只需要初始化一個(gè)任務(wù)處理器,然后往處理器里面添加任務(wù),然后處理器就會(huì)異步地去執(zhí)行了。

舉餐廳的例子,代碼如下:

package main

import (
 "runtime"
 "fmt"
 "time"
 "github.com/chenhg5/go-task"
)

func main() {

 // init
 task.InitTaskReceiver(runtime.NumCPU())

 // 有十個(gè)人同時(shí)點(diǎn)菜
 for i := 0; i  10; i++ {
  task.AddTask(task.NewTask(
   map[string]interface{}{
    "paramA" : "value",
   }, // 參數(shù)
   []task.FacFunc{ordering, cooking, deliverying}, // 任務(wù)列表
   -1), // -1代表任務(wù)不超時(shí)
  )
 }

 time.Sleep(time.Second * 50)
}

// 下單任務(wù)
func ordering(uuid string, param map[string]interface{}) (string, error) {
 fmt.Println("i am ordering")
 time.Sleep(time.Second * 1)
 return uuid, nil
}

// 做菜任務(wù)
func cooking(uuid string, param map[string]interface{}) (string, error) {
 fmt.Println("i am cooking")
 time.Sleep(time.Second * 1)
 return uuid, nil
}

// 配送任務(wù)
func deliverying(uuid string, param map[string]interface{}) (string, error) {
 fmt.Println("i am deliverying")
 time.Sleep(time.Second * 1)
 return uuid, nil
}

跑一遍,就會(huì)看到:

i am ordering
i am ordering
i am ordering
i am ordering
i am ordering
i am ordering
i am ordering
i am ordering
i am cooking
i am cooking
i am cooking
i am cooking
i am cooking
i am cooking
i am cooking
i am cooking
i am deliverying
i am deliverying
i am deliverying
i am deliverying
i am deliverying
i am deliverying
i am deliverying
i am deliverying
i am ordering
i am ordering
i am cooking
i am cooking
i am deliverying
i am deliverying

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • golang中for循環(huán)遍歷channel時(shí)需要注意的問(wèn)題詳解
  • golang實(shí)現(xiàn)基于channel的通用連接池詳解
  • Golang優(yōu)雅關(guān)閉channel的方法示例
  • golang中單向channel的語(yǔ)法介紹
  • golang判斷chan channel是否關(guān)閉的方法
  • Golang中channel使用的一些小技巧
  • Golang中channel的原理解讀(推薦)

標(biāo)簽:泰安 昭通 晉中 東營(yíng) 滄州 阿壩 駐馬店 瀘州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于golang channel實(shí)現(xiàn)的輕量級(jí)異步任務(wù)分發(fā)器示例代碼》,本文關(guān)鍵詞  基于,golang,channel,實(shí)現(xiàn),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于golang channel實(shí)現(xiàn)的輕量級(jí)異步任務(wù)分發(fā)器示例代碼》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于基于golang channel實(shí)現(xiàn)的輕量級(jí)異步任務(wù)分發(fā)器示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章