golang控制并发数的实现方法很简单,就是使用一个有缓冲的通道来实现。
//控制并发数,免得超负载。每次最多有3个进程(协程)同时执行搜索函数DoSearch
var sem = make(chan bool, 3)
func DoSearch() { // only 3 instances of this function can run
sem <- true
defer func() {
<-sem
}()
fmt.Println("处理搜索逻辑中………………")
time.Sleep(10 * time.Second)
fmt.Println("搜索完成!!!")
}
func main() {
for i := 0; i < 5; i++ {
go test.DoSearch()
}
time.Sleep(50 * time.Second)
}
运行结果:每次都是同时运行三个协程。