标签:add 取出 一个 test div second cap 应用 监听
非缓冲信道是一个进一个出,再一个进再一个出,信道内是不保存数据的;
缓冲信道是可以很多个依次进去,存储在信道里,然后一个一个的按次序取出来。
package main import "fmt" func main(){ var a chan int = make(chan int,3) a <-1 a <-2 a <-3 fmt.Println("缓冲信道") }
package main import "fmt" func main() { var a =make(chan int ,4) a<-1 a<-2 fmt.Println(len(a)) // 打印结果:2 fmt.Println(cap(a)) //:4 <-a fmt.Println(len(a)) //:1 fmt.Println(cap(a)) //:4 }
func test6(wg *sync.WaitGroup,i int) { time.Sleep(time.Second*2) fmt.Println(i) wg.Done() } func main() { //sync包下的WaitGroup,是个值类型,当参传递,需要取地址 var wg sync.WaitGroup for i:=0;i<5;i++{ //wg.Add表示标志了起了一个goroutine wg.Add(1) go test6(&wg,i) } //等待所有协程执行完成 wg.Wait() fmt.Println("都执行完了") }
缓冲信道的重要应用之一就是实现[工作池]。
一般而言,工作池就是一组等待任务分配的线程。一旦完成了所分配的任务,这些线程可继续等待任务的分配。
工作池的核心功能如下:
标签:add 取出 一个 test div second cap 应用 监听
原文地址:https://www.cnblogs.com/xiongying4/p/12037213.html