Go channel 源码解析:hchan 结构、环形缓冲与收发流程
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
channel 底层是 hchan 结构体:① 环形缓冲区 buf(有缓冲时存储数据);② sendx/recvx(发送/接收索引);③ sendq/recvq(等待队列:阻塞的发送者/接收者 goroutine);④ mutex 保护所有操作。发送流程:缓冲有空位 → 写入环形缓冲;无缓冲或缓冲满 → 挂到 sendq 并 gopark 阻塞;有等待接收者 → 直接复制给接收者。接收相反。关闭:closechan 置 closed 标志、唤醒所有等待者(收到零值)。内存布局:无缓冲有 recvq 直接拷贝语义。
回复
0 条回复