async - go實現的異步類

jopen 8年前發布 | 15K 次閱讀 async Google Go/Golang開發

golang async

簡介

通過golang的goruntine來提供一種異步處理程序的能力。

應用場景

這在多個耗時長的網絡請求(如:調用API接口)時非常有用。其可將順序執行變為并行計算,可極大提高程序的執行效率。也能更好的發揮出多核CPU的優勢。

使用

go get github.com/freshcn/async

demo

// 建議程序開啟多核支持
runtime.GOMAXPROCS(runtime.NumCPU())

// 耗時操作1
func request1()interface{}{
  //sql request...
}

// 耗時操作2
func request2()interface{}{
  //sql request...
}

// 新建一個async對象
async:=new async.NewAsync()

// 添加request1異步請求,第一個參數為該異步請求的唯一logo,第二個參數為異步完成后的回調函數,回調參數類型為func()interface{}
async.Add("request1",request1)
// 添加request2異步請求
async.Add("request2",request2)

// 執行
if chans,ok := async.Run();ok{
    // 將數據從通道中取回,取回的值是一個map[string]interface{}類型,key為async.Add()時添加的logo,interface{}為該logo回調函數返回的結果
    res := <-chans
    // 這里最好判斷下是否所有的異步請求都已經執行成功
        if len(res) == 2 {
            for k, v := range res {
                //do something
            }
        } else {
            log.Println("async not execution all task")
        }
}

// 清除掉本次操作的所以數據,方便后續繼續使用async對象
async.Clean()

項目地址: https://github.com/freshcn/async

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!