欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年07月02日 16:49:19   作者:honhon  
這篇文章主要給大家介紹了關(guān)于基于golang channel實現(xiàn)的輕量級異步任務(wù)分發(fā)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

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

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

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

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

package main

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

func main() {

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

 // 有十個人同時點菜
 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ù)不超時
  )
 }

 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
}

跑一遍,就會看到:

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é)

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

相關(guān)文章

  • golang int 轉(zhuǎn)float 強轉(zhuǎn)和高精度轉(zhuǎn)操作

    golang int 轉(zhuǎn)float 強轉(zhuǎn)和高精度轉(zhuǎn)操作

    這篇文章主要介紹了golang int 轉(zhuǎn)float 強轉(zhuǎn)和高精度轉(zhuǎn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang中ringbuffer的實現(xiàn)與應(yīng)用場景詳解

    Golang中ringbuffer的實現(xiàn)與應(yīng)用場景詳解

    ringbuffer因為它能復(fù)用緩沖空間,通常用于網(wǎng)絡(luò)通信連接的讀寫,雖然市面上已經(jīng)有了go寫的諸多版本的ringbuffer組件,但還是自己造一個吧
    2023-06-06
  • golang兩種調(diào)用rpc的方法

    golang兩種調(diào)用rpc的方法

    這篇文章主要介紹了golang兩種調(diào)用rpc的方法,結(jié)合實例形式分析了Go語言調(diào)用rpc的原理與實現(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • Go語言中的sync包同步原語最新詳解

    Go語言中的sync包同步原語最新詳解

    Go語言在sync包中提供了一套多才多藝的同步機制,以及用于管理對共享資源的并發(fā)訪問的原子操作,了解這些工具并為您的并發(fā)需求選擇合適的工具是編寫高效可靠的并發(fā)Go程序的關(guān)鍵,這篇文章主要介紹了Go語言中的`sync`包同步原語,需要的朋友可以參考下
    2023-12-12
  • Golang基礎(chǔ)學(xué)習(xí)之map的示例詳解

    Golang基礎(chǔ)學(xué)習(xí)之map的示例詳解

    哈希表是常見的數(shù)據(jù)結(jié)構(gòu),有的語言會將哈希稱作字典或者映射,在Go中,哈希就是常見的數(shù)據(jù)類型map,本文就來聊聊Golang中map的相關(guān)知識吧
    2023-03-03
  • golan參數(shù)校驗Validator

    golan參數(shù)校驗Validator

    這篇文章主要介紹了golan參數(shù)校驗Validator,validator包可以通過反射結(jié)構(gòu)體struct的tag進行參數(shù)校驗,下面來看看文章的詳細介紹吧,需要的朋友也可以參考一下
    2021-12-12
  • 深入探討Golang中如何進行并發(fā)發(fā)送HTTP請求

    深入探討Golang中如何進行并發(fā)發(fā)送HTTP請求

    在?Golang?領(lǐng)域,并發(fā)發(fā)送?HTTP?請求是優(yōu)化?Web?應(yīng)用程序的一項重要技能,本文探討了實現(xiàn)此目的的各種方法,文中的示例代碼講解詳細,希望對大家有所幫助
    2024-01-01
  • 一篇文章帶你搞懂Go語言標(biāo)準(zhǔn)庫Time

    一篇文章帶你搞懂Go語言標(biāo)準(zhǔn)庫Time

    在我們開發(fā)的過程中,每個項目都需要時間這一類的函數(shù),此時對time這個包的研究深度就顯得尤為重要,這篇文章主要給大家介紹了關(guān)于如何通過一篇文章帶你搞懂Go語言標(biāo)準(zhǔn)庫Time的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 一文詳解Go語言中切片的底層原理

    一文詳解Go語言中切片的底層原理

    在Go語言中,切片作為一種引用類型數(shù)據(jù),相對數(shù)組而言是一種動態(tài)長度的數(shù)據(jù)類型,使用的場景也是非常多,所以本文主要來和大家聊聊切片的底層原理,需要的可以參考一下
    2023-06-06
  • Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    Go語言學(xué)習(xí)之new函數(shù)的用法詳解

    這篇文章主要為大家詳細介紹了Go語言中new()函數(shù)的相關(guān)知識以及具體用法,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2023-05-05

最新評論