GO并发控制库Concurrency怎么使用
这篇文章主要介绍“GO并发控制库Concurrency怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO并发控制库Concurrency怎么使用”文章能帮助大家解决问题。
Concurrency
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资源空闲就去执行。
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怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341