首页
视频
资源
登录
原
golang 简单的workpool demo
5597
人阅读
2021/2/8 12:52
总访问:
90381
评论:
0
收藏:
0
手机
分类:
golang
```go // 实现计算一个数字的各个位数之和如:123=6 // 采用工作池方式 package main import ( "fmt" "math/rand" ) type job struct { number int id int } type result struct { job *job sum int } func main() { j := make(chan *job, 1000) r := make(chan *result, 1000) //调用消费者 workpool(128, j, r) go printResult(r) //调用生产者 producer(j) } //calc 计算函数 func calc(job *job, res chan *result) { var sum int number := job.number for number != 0 { tmp := number % 10 sum += tmp number /= 10 } r := &result{ job: job, sum: sum, } res <- r } //消费者work不断从chan管道 中获取所需参数 func work(job chan *job, res chan *result) { for j := range job { calc(j, res) } } //workpool 这里不断开启指定个数的goroutine func workpool(workNum int, job chan *job, res chan *result) { for i := 0; i < workNum; i++ { go work(job, res) } } //printResult打印结果 func printResult(result chan *result) { for r := range result { fmt.Printf("结果:id=%d,number=%d,计算结果=%d\n", r.job.id, r.job.number, r.sum) } } //producer 生成者 func producer(jobChan chan *job) { var id int = 0 for { id++ number := rand.Int() job := &job{ number: number, id: id, } jobChan <- job } } ``` 运行结果如下 ![](https://img.tnblog.net/arcimg/17607487550/d434ed31734f4f6eab9592f6d0d220a3.png)
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
瑾语
无论这个世界对你怎样,都请你一如既往的努力、勇敢、充满希望。
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
小技巧
5篇
Net
4篇
编程基础
2篇
golang
7篇
mq
2篇
概念
1篇
golang并发
0篇
面试经
0篇
go坑
1篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术