首頁 > 後端開發 > Golang > 主體

分享一個非常好用的GO並發控制庫 !

藏色散人
發布: 2022-12-21 18:01:40
轉載
4730 人瀏覽過

這篇文章跟大家介紹Golang的相關知識,聊聊一個非常好用的golang並發控制庫,希望對大家有幫助。

分享一個非常好用的GO並發控制庫 !

Concurrency

Build Status

#install

GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
登入後複製

  • # #Feature
  • 並發協程數量限制支援contex.Contex

支援panic recover, 傳回包含錯誤堆疊的

error
  • 遞歸實現的任務調度, 不依賴time.Ticker
channel
########################################## ######Usage#########WorkerGroup 工作群組, 新增一組任務, 等待執行完成, 可以很好的替代###WaitGroup###.#######
package mainimport (
    "fmt"
    "github.com/lxzan/concurrency"
    "sync/atomic")func main() {
    sum := int64(0)
    w := concurrency.NewWorkerGroup()
    for i := int64(1); i <= 10; i++ {
        w.AddJob(concurrency.Job{
            Args: i,
            Do: func(args interface{}) error {
                fmt.Printf("%v ", args)
                atomic.AddInt64(&sum, args.(int64))
                return nil
            },
        })
    }
    w.StartAndWait()
    fmt.Printf("sum=%d\n", sum)}
登入後複製
4 5 6 7 8 9 10 1 3 2 sum=55
登入後複製
# #####WorkerQueue  工作佇列, 可以不斷往裡面新增任務, 一旦有CPU資源空閒就去執行【建議:###go教學###】######
package mainimport (
    "fmt"
    "github.com/lxzan/concurrency"
    "time")func Add(args interface{}) error {
    arr := args.([]int)
    ans := 0
    for _, item := range arr {
        ans += item    }
    fmt.Printf("args=%v, ans=%d\n", args, ans)
    return nil}func Mul(args interface{}) error {
    arr := args.([]int)
    ans := 1
    for _, item := range arr {
        ans *= item    }
    fmt.Printf("args=%v, ans=%d\n", args, ans)
    return nil}func main() {
    args1 := []int{1, 3}
    args2 := []int{1, 3, 5}
    w := concurrency.NewWorkerQueue()
    w.AddJob(
        concurrency.Job{Args: args1, Do: Add},
        concurrency.Job{Args: args1, Do: Mul},
        concurrency.Job{Args: args2, Do: Add},
        concurrency.Job{Args: args2, Do: Mul},
    )
    w.StopAndWait(30*time.Second)}
登入後複製
args=[1 3], ans=4args=[1 3 5], ans=15args=[1 3], ans=3args=[1 3 5], ans=9
登入後複製

以上是分享一個非常好用的GO並發控制庫 !的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!