Go 并发控制方案:信号量、worker pool 与限流怎么选
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
方法:① 带缓冲 channel 做信号量:sem := make(chan struct{}, N),执行前 sem <- struct{}{},结束 <-sem 释放——限制最大并发数;② worker pool:固定 N 个 goroutine 从任务 channel 取任务(for job := range jobs),任务多时排队;③ errgroup.SetLimit(N) 限制并发且收集错误;④ golang.org/x/time/rate 令牌桶限流(QPS 控制);⑤ 分布式限流用 Redis 令牌桶/漏桶。选择:资源限制用信号量,任务批处理用 worker pool。
回复
0 条回复