SuperAPI AI 工具集

golang-concurrency-patterns

编程与开发

查看项目

更新于 10-15 17:27

技能介绍

用途:帮助在 Go 服务中安全地组织并发,明确 goroutine 生命周期、用 context.Context 传播取消,并保护共享状态,避免 goroutine 泄漏、死锁与数据竞态。

主要能力:

  1. 基础构件:用 context 驱动取消与超时;用 errgroup.WithContext 实现扇出/扇入并在任一任务出错时提前中止;用信号量或工作池限制并发数;共享状态用互斥锁保护,或由单一 goroutine 独占。
  2. 常见模式:errgroup 取消兄弟任务;信号量式有界并发;固定工作数的 worker pool;管道阶段(仅发送方关闭 channel);用 time.NewTicker 做周期性任务以避免泄漏。
  3. 选型建议:需要所有权/串行化用 channel,读写共享缓存用 RWMutex,低竞争计数用 atomic;需要错误传播与兄弟取消用 errgroup,仅等待用 sync.WaitGroup;需背压用无缓冲 channel,吸收突增用有缓冲。
  4. 测试与排查:用竞态检测器运行测试:go test -race ./...;调试时禁用缓存:go test -run TestName -race -count=1 ./...。用 context.WithTimeout 为测试设置超时。

反模式:请求处理器中 fire-and-forget goroutine;热循环里用 time.After;接收方关闭 channel;无同步地跨 goroutine 共享可变变量;忽略调用方 context 而使用 context.Background()。

适用场景:生产 Go 微服务与后台任务中需要并发处理、限流、取消与稳定吞吐的场合。

限制:资料为模式与示例说明,未提供具体版本兼容性、性能基准或完整可运行项目;实际采用需自行验证。