Go channel 源码解析:hchan 结构、环形缓冲与收发流程
channel 底层是 hchan 结构体:① 环形缓冲区 buf(有缓冲时存储数据);② sendx/recvx(发送/接收索引);③ sendq/recvq(等待队列:阻塞的发送者/接收者 goroutine);④ mutex 保护所有操作。发送流程:缓冲有空位 → 写入环形缓冲;无缓冲或缓冲满 → 挂到 sendq 并 gopark 阻塞;有等待接收者 → 直接复制给接收者。接收相反。关闭:closechan 置 closed 标志、唤醒所有等待者(收到零值)。内存布局:无缓冲有 recvq 直接拷贝语义。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。