Go语言并发编程-缓冲和单向通道

缓冲通道

缓冲通道就是指一个通道带有一个缓冲区,发送数据到一个缓冲通道只有在缓冲区满时才被阻塞,从缓冲通道获取数据只有在缓冲区为空时才会被阻塞。
通道可以存放的数据个数为1+缓冲区容量
代码实现:

package main

import (
	"fmt"
	"strconv"
)

func main(){
	ch := make(chan string, 4) //缓冲区容量为4
	go sendData(ch)

	for v := range ch{
		fmt.Println("读取的数据:",v)
	}
	fmt.Println("main..over..")
}


func sendData(ch chan string){
	for i:=0;i<10;i++{
		ch <- "数据" + strconv.Itoa(i)
		fmt.Printf("子goroutine中写入第 %d 个数据\n",i)
	}
	close(ch)
}

控制台输出(结果不唯一):

子goroutine中写入第 0 个数据
子goroutine中写入第 1 个数据
读取的数据: 数据0
读取的数据: 数据1
读取的数据: 数据2							//注意理解此处的误差
子goroutine中写入第 2 个数据
子goroutine中写入第 3 个数据
子goroutine中写入第 4 个数据
子goroutine中写入第 5 个数据
子goroutine中写入第 6 个数据
子goroutine中写入第 7 个数据
读取的数据: 数据3
读取的数据: 数据4
读取的数据: 数据5
读取的数据: 数据6
读取的数据: 数据7
子goroutine中写入第 8 个数据
子goroutine中写入第 9 个数据
读取的数据: 数据8
读取的数据: 数据9
main..over..

单向通道

前面学习的通道都是双向的,即既可以从一个方向都,也可以从同一个方向写,而单向通道,即是只能读,或者写的通道
单向通道有什么用呢?
我们往往只会创建普通的通道,
而单向通道往往用来作为函数的形参保证函数对其只读或者只写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值