文章目录
Golang:并发任务处理器
要求:给定n个task任务的数组tasks,和执行函数excute(),构造一个函数handle(),并发执行task任务,并且同一时间允许的最大并发调用数为10。
内容提要:管道channel
管道的定义:
// 10个缓冲区的chan; make(chan chan类型,缓冲区大小)
var cacheCh = make(chan struct{
},10)
// 无缓冲区的chan
var ch = make(chan struct{
})
管道的传值:
管道变量之后使用符号<-+值。即可向管道中传入值,例如:
// 向管道中插入一个空的结构体
ch <- struct{}{}
管道的值获取:
在管道变量之前使用<-表示冲管道中取值,如果管道中没有值,会阻塞。
// 将从管道中获取到的值赋值到变量value中.如果没有值会阻塞直到获取到值
value := <- ch
有缓冲区和无缓冲区的区别:
当管道中的值还没有被消耗完,且管道已满。再向管道中传值会阻塞,直到缓冲区有空位。
// 定义一个两个缓冲区的管道,然后插入3次值
ch2 := make(chan int, 2)
// 向管道中传值
go func() {
for i := 1; i <=</

本文介绍了如何使用Golang的并发特性处理任务。通过管道channel限制并发数量,利用sync.WaitGroup确保所有任务完成。示例展示了如何创建一个并发任务处理器,限制最大并发数为10,同时解释了缓冲区与无缓冲区管道的区别以及死锁的避免。文章还讲解了sync.WaitGroup在等待多协程完成时的作用。
最低0.47元/天 解锁文章
650





