
// 实现计算一个数字的各个位数之和如: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
}
}
运行结果如下
评价
排名
25
文章
22
粉丝
5
评论
7
C# string 和String 的区别
剑轩 : 所以区别主要在哪里呢....
markdown 初步学习
剑轩 : 哇哦,真的喜欢你这个个性签名,很不错
pythoic 写法
剑轩 : 新年快乐啊
python拼接字符串八种
剑轩 : 手动点赞+1
python拼接字符串八种
雨雨雨雨雨辰 : 手动点赞
pythoic 写法
瑾语 : 你好
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术