基於golang channel的輕量級非同步任務分發器

來源:互聯網
上載者:User

項目地址:https://github.com/chenhg5/go...

有時候我們為了更好的利用電腦資源,可以把一些耗時間長度的任務隊列化非同步執行。舉個對應簡單的生活中例子就是大多數餐廳裡面點菜都是先找地方做,看了菜單選好菜之後找服務員點菜,此時再等待菜做好送上來。這裡餐廳廚房就是電腦的底層資源,菜就是待執行的任務,而服務員就是我們的go channel。

關於訊息佇列有很多好用的架構,如nsq,nats,kafka等等。但有時我們只需要輕量級的非同步任務工具,而不需要太過於"複雜"的架構相對於我們的需求來說。於是借鑒一些項目架構,做了一個小小的封裝。

go-task的使用很簡單,只需要初始化一個任務處理器,然後往處理器裡面新增工作,然後處理器就會非同步地去執行了。

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

package mainimport (    "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",            },  // 參數            []task.FacFunc{ordering, cooking, deliverying}, // 工作清單            -1), // -1代表任務不逾時        )    }    time.Sleep(time.Second * 50)}// 下單任務func ordering(uuid string, param map[string]interface{}) (string, error) {    fmt.Println("i am ordering")    time.Sleep(time.Second * 1)    return uuid, nil}// 做菜任務func cooking(uuid string, param map[string]interface{}) (string, error) {    fmt.Println("i am cooking")    time.Sleep(time.Second * 1)    return uuid, nil}// 配送任務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 orderingi am orderingi am orderingi am orderingi am orderingi am orderingi am orderingi am orderingi am cookingi am cookingi am cookingi am cookingi am cookingi am cookingi am cookingi am cookingi am deliveryingi am deliveryingi am deliveryingi am deliveryingi am deliveryingi am deliveryingi am deliveryingi am deliveryingi am orderingi am orderingi am cookingi am cookingi am deliveryingi am deliverying
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.