没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
10/11/2023, 14:15
GO 中 Chan 实现原理分享 - 哔哩哔哩
https://www.bilibili.com/read/cv11800823/
1/14
专
栏
/
GO
中
C
ha
n
实
现
原
理
分
享
GO
中
C
ha
n
实
现
原
理
分
享
2021
年
06
⽉
19
⽇
22
38 431
浏
览
·
1
喜
欢
·
0
评论
阿
兵
云
原
⽣
粉
丝:
315
⽂
章
:
267
关
注
GO
中
C
ha
n
实
现
原
理
分
享
嗨
,
我
是
⼩
魔
童
哪
吒
,
还
记
得
咱
们之
前分
享
过
GO
通道
和
syn
c
包
的
使
⽤
吗
?
咱
们
来
回
顾
⼀下
分
享了
通道
是
什么
,
通道
的
种
类
⽆
缓
冲
,
有
缓
冲
,
单向
通道
具
体
对
应
什么
对
于
通道
的
具
体
实
践
分
享了
关
于
通道
的
异常
情
况
整
理
简
单
分
享了
syn
c
包
的
使
⽤
要
是
对
上
述
内
容
还
有
点
兴
趣
的
话
,
欢
迎
查
看
⽂
章
GO
通道
和
syn
c
包
的
分
享
cha
n
是
什么
?
是
⼀
种
特
殊
的
类
型
,
是
连
接
并
发
goroutine
的
管
道
cha
nn
e
l
通道
是
可
以
让
⼀个
g
orout
i
n
e
协
程
发
送
特
定
值
到
另
⼀个
g
orout
i
n
e
协
程
的
通
信
机
制
。
通道
像
⼀个
传
送
带
或
者
队
列
,
总
是
遵
循
先⼊先出
(
F
i
rst
I
n
F
i
rst
O
ut
)
的
规
则
,
保
证
收
发
数据
的
顺
序
,
这
⼀
点
和
管
道
是
⼀
样
的
⼀个
协
程
从
通道
的
⼀
头
放
⼊
数据
,
另
⼀个
协
程
从
通道
的
另
⼀
头
读
出
数据
每
⼀个
通道都
是
⼀个
具
体
类
型
的
导
管
,
声
明
cha
nn
e
l
的
时
候
需
要
为
其
指
定
元
素类
型
。
本
篇
⽂
章
主
要
是
分
享
关
于
通道
的
实
现
原
理
,
关
于
通道
的
使
⽤
,
可
以
查
看
⽂
章
GO
通道
和
syn
c
包
的
分
享
,
这
⾥
有
详
细
的
说
明
GO
中
C
ha
n
的
底
层
数据
结
构
了
解
每
⼀个
组
件
或
者
每
⼀个
数据
类
型
的
实
现
原
理
,
咱
们
都
会
去
看
源
码
中
的
数据
结
构是
如
何
设计
的
同
样
,
我
们
⼀
起
来
看看
GO
的
C
ha
n
的
数据
结
构
GO
的
C
ha
n
的
源
码
实
现
是
在
:
src/runtime/chan.go
主
站
番
剧
游
戏
中
⼼
直
播
会
员
购
漫
画
赛
事
下
载
客
户
端
S
13
登
录
⼤
会
员
消
息
动
态
收
藏
历史
记
录
GO
中
C
ha
n
实
现
原
理
分
享
阿
兵
云
原
⽣
关
注
10/11/2023, 14:15
GO 中 Chan 实现原理分享 - 哔哩哔哩
https://www.bilibili.com/read/cv11800823/
2/14
typehchanstruct{
qcountuint//totaldatainthequeue
dataqsizuint//sizeofthecircularqueue
bufunsafe.Pointer//pointstoanarrayofdataqsizele
ments
elemsizeuint16
closeduint32
elemtype*_type//elementtype
sendxuint//sendindex
recvxuint//receiveindex
recvqwaitq//listofrecvwaiters
sendqwaitq//listofsendwaiters
//lockprotectsallfieldsinhchan,aswellasseveral
//fieldsinsudogsblockedonthischannel.
//
//DonotchangeanotherG'sstatuswhileholdingthislock
//(inparticular,donotreadyaG),asthiscandeadlock
//withstackshrinking.
lockmutex
}
hchan
是
实
现
通道
的
核
⼼
数据
结
构
,
对
应
的
成
员
也
是
不
少
,
咱
们
根
据
源
码
注
释
⼀个
参
数
⼀个
参
数
的
来
看看
Explain
GIF
主
站
番
剧
游
戏
中
⼼
直
播
会
员
购
漫
画
赛
事
下
载
客
户
端
S
13
登
录
⼤
会
员
消
息
动
态
收
藏
历史
记
录
GO
中
C
ha
n
实
现
原
理
分
享
阿
兵
云
原
⽣
关
注
10/11/2023, 14:15
GO 中 Chan 实现原理分享 - 哔哩哔哩
https://www.bilibili.com/read/cv11800823/
3/14
t
ag
说
明
q
c
ount
当
前
的
队
列
,
剩
余
元
素
个
数
da
t
a
qs
i
z
环
形
队
列
可
以
存
放
的
元
素
个
数
,
也
就
是
环
形
队
列
的
⻓
度
b
u
f
指
针
,
指
向
环
形
队
列
e
l
e
ms
i
z
e
指
的的
队
列
中
每
个
元
素
的
⼤
⼩
c
los
ed
具
体
标
识
关
闭
的
状
态
e
l
e
mtyp
e
⻅
名
知
意
,
元
素
的
类
型
s
e
n
d
x
发
送
队
列
的
下
标
,
向
队
列
中
写⼊
数据
的
时
候
,
存
放
在
队
列
中
的
位
置
r
ec
vx
接
受
队
列
的
下
标
,
从
队
列
的
这
个
位
置
开
始
读
取
数据
r
ec
vq
协
程
队
列
,
等
待
读
取
消
息
的
协
程
队
列
s
e
n
d
q
协
程
队
列
,
等
待
发
送
消
息
的
协
程
队
列
lo
ck
互
斥
锁
,
在
cha
n
中
,不
可
以
并
发
的
读
写
数据
根
据
上
⾯
的
参
数
,
我
们
或
多
或
少就
可
以
知
道
GO
中
的
通道
实
现
原
理
设计
了
哪
些
知
识
点
:
指
针
环
形
队
列
协
程
互
斥
锁
我
们
顺
便
再
来
看看
上
述
成
员
的
协
程
队
列
waitq
对
应
的
是
啥
样
的
数据
结
构
typewaitqstruct{
first*sudog
last*sudog
}
sudog
结
构是
在
src/runtime/runtime2.go
中
,
咱
们
顺
便
多
学
⼀
⼿
//sudogrepresentsaginawaitlist,suchasforsending/rece
iving
//onachannel.
typesudogstruct{
//Thefollowingfieldsareprotectedbythehchan.lockofth
e
//channelthissudogisblockingon.shrinkstackdependson
//thisforsudogsinvolvedinchannelops.
g*g
next*sudog
prev*sudog
elemunsafe.Pointer//dataelement(maypointtostack)
//Thefollowingfieldsareneveraccessedconcurrently.
//Forchannels,waitlinkisonlyaccessedbyg.
//Forsemaphores,allfields(includingtheonesabove)
//areonlyaccessedwhenholdingasemaRootlock.
acquiretimeint64
releasetimeint64
ticketuint32
//isSelectindicatesgisparticipatinginaselect,so
//g.selectDonemustbeCAS'dtowinthewake-uprace.
isSelectbool
//successindicateswhethercommunicationoverchannelc
//succeeded.Itistrueifthegoroutinewasawokenbecause
Explain
Explain
主
站
番
剧
游
戏
中
⼼
直
播
会
员
购
漫
画
赛
事
下
载
客
户
端
S
13
登
录
⼤
会
员
消
息
动
态
收
藏
历史
记
录
GO
中
C
ha
n
实
现
原
理
分
享
阿
兵
云
原
⽣
关
注
剩余13页未读,继续阅读
资源评论
FeelTouchLabs
- 粉丝: 1w+
- 资源: 78
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功