这个文章是作为学习笔记记录,学习应用地址:Go 系列教程 —— 23. 缓冲信道和工作池(Buffered Channels and Worker Pools)
自己书写的代码:
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
/*
我们会使用缓冲信道来实现工作池。
我们工作池的任务是计算所输入数字的每一位的和。
例如,如果输入 234,结果会是 9(即 2 + 3 + 4)。向工作池输入的是一列伪随机数。
*/
/*
我们工作池的核心功能如下:
创建一个 Go 协程池,监听一个等待作业分配的输入型缓冲信道。
将作业添加到该输入型缓冲信道中。
作业完成后,再将结果写入一个输出型缓冲信道。
从输出型缓冲信道读取并打印结果。
*/
//首先需要两个结构体
//这个结构体表示存入随机数id和随机数
type Job struct {
Id int
randOnMo int
}
//表示每个随机数和随机数计算每一个数字的和的结果
type Result struct {
Job Job
SumOfDigits int
}
//用于写入作业的信道
var jobs = make(chan Job,10)
//用于输出作业的信道
var results = make(chan Result,10)
//表示有工作池的情况下 协程的运行与截止
func main() {
//工作协程(Worker Goroutine)会监听缓冲信道 jobs 里更新的作业。一旦工作协程完成了作业,其结果会写入缓冲信道