Go channel 死锁场景盘点:如何快速定位与避免
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
死锁:所有 goroutine 都阻塞且无法解除,运行时报 fatal error: all goroutines are asleep - deadlock!。常见:① 无缓冲 channel 只发不收或只收不发;② 主 goroutine 阻塞等子 goroutine,子 goroutine 又在等主 goroutine 数据;③ 忘记 close 导致 range 永不退出(不算死锁但泄漏);④ 锁 + channel 混用循环等待。排查:看堆栈找阻塞点、检查收发配对、加超时 select 兜底、用 go vet 检查部分静态问题。
回复
0 条回复