详解 goLang 的 channel

本文详细剖析了Go语言中channel的内部实现,包括hchan对象、waitq对象、创建、发送和接收数据的流程,以及关闭channel的机制。通过讲解,帮助读者理解channel的数据结构和算法,以便更好地掌握Go的并发编程。
摘要由CSDN通过智能技术生成

概述

下面表格中的内容是 Go 语言中 channel 数据类型的使用规则,相信读者已经可以熟练掌握,本文主要分析 channel 的内部实现中的数据结构和算法,所以相关的基础概念会直接跳过, 希望读者阅读完本文后,可以深入理解表格中的各类规则,从应用层代码到底层实现,能够知其然并知其所以然。

操作规则

操作 nil 已关闭的 channel 未关闭有缓冲区的 channel 未关闭无缓冲区的 channel
关闭 panic panic 成功关闭,然后可以读取缓冲区的值,读取完之后,继续读取到的是 channel 类型的默认值 成功关闭,之后读取到的是 channel 类型的默认值
接收 阻塞 不阻塞,读取到的是 channel 类型的默认值 不阻塞,正常读取值 阻塞
发送 阻塞 panic 不阻塞,正常写入值 阻塞

编译规则

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值