面试真题

Go · 中等 · 百度

Channel的底层结构与数据的收发流程

中等 Go 🎤 百度
参考答案
结论:Go channel底层是hchan结构体,收发流程依赖缓冲区和等待队列。核心结构:hchan含buf环形队列(dataqsiz大小)、sendx/recvx索引、recvq/sendq等待队列(sudog链表)、lock与elemtype。收发流程:发送时加锁,若recvq有等待接收者则直接交付数据并唤醒;否则若缓冲未满写入buf并移动sendx;否则封装sudog入sendq挂起。接收对称:优先从recvq取等待发送者,再取buf,最后挂起。该机制实现CSP通信,避免锁竞争。
题目整理自公开面经,答案由校招宝自研生成,仅供参考