DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Golang

Go channel 源码解析:hchan 结构、环形缓冲与收发流程

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

channel 底层是 hchan 结构体:① 环形缓冲区 buf(有缓冲时存储数据);② sendx/recvx(发送/接收索引);③ sendq/recvq(等待队列:阻塞的发送者/接收者 goroutine);④ mutex 保护所有操作。发送流程:缓冲有空位 → 写入环形缓冲;无缓冲或缓冲满 → 挂到 sendq 并 gopark 阻塞;有等待接收者 → 直接复制给接收者。接收相反。关闭:closechan 置 closed 标志、唤醒所有等待者(收到零值)。内存布局:无缓冲有 recvq 直接拷贝语义。

下载推广海报

圈内讨论推广海报

《Go channel 源码解析:hchan 结构、环形缓冲与收发流程》完整推广海报
REPLIES

回复

0 条回复
暂无回复。