展示如何使用无缓冲的通道创建一个goroutine池,控制并发频率
1.无缓冲通道保证了两个goroutine之间的数据交换
2.当所有的goroutine都忙的时候,能够及时通过通道告知调用者
3.无缓冲的通道不会有工作在队列里丢失或卡住...4.创建一个工作池,比如这时候会创建出2个goroutine,被一个无缓冲通道阻塞住,等待在那里,除非通道关闭,在当前的gorotine上会无限循环读取通道,不会退出
5.当有一堆的任务goroutine...被发送过来的时候,会先传送给那一个通道,这时候不管有多少个,都会阻塞并等待上面那俩工作完,就起到了控制并发的目的
package main
import (
"log"
"sync"
"time...,有个必须实现的Task()方法
type Worker interface {
Task()
}
//定义一个类型Pool,有两个成员
type Pool struct {
//成员work,通道类型...,如果通道不为空,就会阻塞住
//当300个goroutine,把name传递给run方法,会因为通道不为空被阻塞住
//通道何时才能为空呢,也就只有在工作池里的goroutine把通道读走