共 2 篇文章
三月 1, 2026
Go 语言 Goroutine 泄露:实战案例分析与排查指南
在 Go 语言开发中,Goroutine 泄露是一个非常隐蔽但致命的问题。它通常发生在一个 Goroutine 被启动后,因为某种逻辑阻塞(比如等待一个永远不会关闭的 Channel 或获取不到锁)而永远无法结束,导致内存逐渐耗尽。
和内存泄漏不同,Goroutine 泄露更难发现——因为 Goroutine 本身占用很小(通常只有几 KB),但成千上万个泄露的 Goroutine 会形成"蚂蚁搬家"效应,最终拖垮整个服务。
本文将分享 4 个实战中非常典型的 Goroutine 泄露案例,并提供排查工具和预防原则。
八月 23, 2024
Go 并发进阶:WaitGroup vs ErrGroup 详解
Go 语言提供了丰富的并发原语,本文详细介绍 sync.WaitGroup 和 golang.org/x/sync/errgroup 的区别和使用场景。
简介
Go 的并发模型以 goroutine 和 channel 为核心,但在实际项目中,我们经常需要协调多个 goroutine 的执行。这就涉及到两组常用的工具:
- sync.WaitGroup:Go 标准库,简单同步
- errgroup:Go 扩展库,功能更强大