这篇文章主要介绍“GO并发控制库Concurrency怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO并发控制库Concurrency怎么使用”文章能帮助大家解决问题。
GOPROXY=https://goproxy.cn go get -v github.com/lxzan/concurrency@latest
并发协程数量限制
支持 contex.Contex
支持 panic recover
, 返回包含错误堆栈的 error
递归实现的任务调度, 不依赖 time.Ticker
和 channel
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资源空闲就去执行。
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并发控制库Concurrency怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。