Golang
快速搞懂 Go 垃圾回收
Go垃圾回收历经四阶段:从STW串行到并发三色标记+混合写屏障,STW降至百微秒以内。采用按需与后台并发增量清扫,并靠写屏障与栈永久黑色保证安全触发由GOGC/定时/runtime.GC。
快速搞懂 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
Go 的 sync.Map 采用 read/dirty 双 map 设计:read 只读,dirty 承担写入;读取靠 CAS 无锁,写入必要时锁 mu;misses 计满 dirty 数据整体晋升到 read 实现批量优化。Store/Delete/Range 均优先无锁走 read,缺项再锁化操...
快速搞懂 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