channel 及 select模型

channel

  • channel的本质是一个线程安全的队列(可以存储interface{}类型的变量),遵循先进先出规则(FIFO),内部实现了同步,确保了并发安全!,可以解决协程之间的通信问题

  • channel有两种:无缓冲channel(初始容量为0),和有缓冲channel(初始容量不为0)

  • 无缓冲channel:无缓冲通道的收发操作必须在不同的两个goroutine间进行,因为通道的数据在没有接收方处理时(没读时),数据发送方会持续阻塞(写的一方被阻塞,反之亦然),所以通道的接收必定在另外一个 goroutine 中进行。

  • 有缓冲channel: 有缓冲channel的阻塞条件
    1)当缓冲通道被填满时,尝试再次发送数据会发生阻塞
    2)当缓冲通道为空时,尝试接收数据会发生阻塞

  • channel默认为全双工的,但可以指定只读channel:ch1 <- chan interface{}和只写channel:ch2 chan <- interface{},全双工channel支持自动转型为只读或者只写channel

  • channel的读操作符为 <- 比如 data <- ch1 ,且从通道读取数据时,可以有两个返回值,arg1是读取的值&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值