使用golang实现简单的worker工作池。 指定worker数量,避免创建过多的Goroutine
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var workerChan chan int = make(chan int ,4) //指定worker数量
var wg = sync.WaitGroup{}
func main() {
//模拟10个任务
for i:=1;i<=10;i++{
wg.Add(1)
workerChan<-i
go exec(i)
}
wg.Wait()
log.Println(`end`)
}
//执行任务
func exec(i int){
defer func() {
<-workerChan
wg.Done()
}()
time.Sleep(1*time.Second)
log.Println(i)
}