您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

分享一个非常好用的GO并发控制库 !

2024/3/29 4:03:19发布28次查看
本篇文章给大家介绍有关golang的相关知识,聊聊一个非常好用的golang并发控制库,希望对大家有所帮助。
concurrency
installgoproxy=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
feature并发协程数量限制支持 contex.contex支持 panic recover, 返回包含错误堆栈的 error递归实现的任务调度, 不依赖 time.ticker 和 channelusageworkergroup 工作组, 添加一组任务, 等待执行完成, 可以很好的替代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并发控制库 !的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product