/**
有缓冲的通道是一种在被接收前能存储一个或者多个值得通道
这种类型不要求goroutine之间必须同时完成发送和接收。
只有在通道中没有要接收的值时,接收动作才会阻塞。
只有在通道中没有可用缓冲区容纳被发送值时,发送动作才会阻塞。
*/
package main
import (
"fmt"
"time"
)
func main(){
//创建一个无缓冲的channel
ch:=make(chan int,4)
fmt.Printf("len(ch)=%d,cap(ch)=%d\n",len(ch),cap(ch))
//新建协程
go func(){
for i:=0;i<4;i++{
fmt.Println("one=",i)
ch<-i//放入后,满了阻塞在此,不会继续执行;待为0时,再继续执行
fmt.Printf("len(ch)=%d,cap(ch)=%d\n",len(ch),cap(ch))
}
}()
//延迟2s
time.Sleep(time.Second*2)
for j:=0;j<4;j++{
num:=<-ch
fmt.Println("recevie one=",num)
}
/**
输出:
F:\goWorkSpace\study\05协程>go run 13_有缓存的channel.go
len(ch)=0,cap(ch)=4
one= 0
len(ch)=1,cap(ch)=4
one= 1
len(ch)=2,cap(ch)=4
one= 2
len(ch)=3,cap(ch)=4
one= 3
len(ch)=4,cap(ch)=4
recevie one= 0
recevie one= 1
recevie one= 2
recevie one= 3
*/
}
5.13 go 有缓冲的channel
猜你喜欢
转载自blog.csdn.net/h4241778/article/details/105374458
今日推荐
周排行