1.6 来,控制一下 goroutine 的并发数量

问题
func main() {
userCount := math.MaxInt64
for i := 0; i < userCount; i++ {
go func(i int) {
// 做一些各种各样的业务逻辑处理
fmt.Printf("go func: %d\n", i)
time.Sleep(time.Second)
}(i)
}
}噩梦般的开始
输出结果
系统负载

CPU

虚拟内存

top
小结
危害
解决方案
控制 goroutine 并发数量
尝试 chan
尝试 sync
小结
尝试 chan + sync
方案一:简单 Semaphore
分析方案
利
弊
小结
灵活控制 goroutine 并发数量
方案二:灵活 chan + sync
方案三:第三方库
总结
Last updated