Golang
快速搞懂 Go sync.WaitGroup
WaitGroup 由 noCopy、64 位原子 state 及 runtime sema 构成。Add/Done 原子更新计数器,归零时以 FIFO 唤醒全部 Wait;Wait 用 CAS 自旋+信号量阻塞。与 Channel 比,它是“计数器+广播”,适用批量等待,不复用不拷贝,可配合 co...
快速搞懂 Go sync.Pool
sync.Pool由多P级缓存、private、共享池及victim组成,Get按private→shared→窃取→New顺序;Put按private→shared回落;GC周期清理池内对象,victim平滑过渡。每P独立缓存降锁竞争,复用短寿对象减内存与GC。
快速搞懂 Go sync.Cond
sync.Cond由Cond结构体+notifyList FIFO单链表实现,必须与sync.Mutex/RWMutex配用。调用Wait先自动Unlock并发给调度器sudog入队睡眠;Signal唤醒首节点、Broadcast遍历全部。防御虚假唤醒需for循环再检条件;Wait醒来自动重锁。不可...
快速搞懂 Go sync.Once 全家桶
sync.Once 用原子+锁双重检查保证只执行一次;Go1.21 新增 OnceFunc、OnceValue、OnceValues 利用其缓存结果或 panic,无重试。
快速搞懂 Go sync.Map
快速搞懂 sync.Map 1. sync.Map长啥样 1.1 结构定义 1.1.1 Map顶层结构 type Map struct { mu sync.Mutex // 一把大锁,只用于 dirty 晋升、mi
快速搞懂 Go channel
1. channel长啥样 1.1 结构定义 1.1.1 hchan type hchan struct { qcount uint // 循环队列中的数据总数 dataqsiz uint // 循环队列大小 buf unsaf
快速搞懂 Go map
1. map 到底长啥? 一句话:map = hmap + 一堆 bmap(桶)。 hmap 是头结构体,里边存着元素个数、桶数组指针、旧桶指针、搬迁进度等元数据。 type hmap struct { count int // 当前元素个数 flags