cxfans
4/7/2019 - 1:38 PM

管道与WaitGroup对比

管道与WaitGroup对比

package main

import (
	"fmt"
	"sync"
)

func main() {
	c := make(chan bool, 100)
	for i := 0; i < 100; i++ {
		go func(i int) {
			fmt.Println(i)
			c <- true
		}(i)
	}

	for i := 0; i < 100; i++ {
		<-c
	}

	wg := sync.WaitGroup{}
	// sync.WaitGroup 只有3个方法,Add(),Done(),Wait()
	// 其中 Done() 是 Add(-1) 的别名
	// Add() 添加计数,Done() 减掉一个计数,计数不为0, 阻塞Wait()的运行
	wg.Add(100)
	for i := 0; i < 100; i++ {
		go func(i int) {
			fmt.Println(i)
			wg.Done()
		}(i)
	}
	wg.Wait()
}