var sem = make(chan int, 100) //-------------------------------------------------------------------------------- func handle(r *Request) { sem <- 1 process(r) // 可以控制 process 的并发数 <-sem } func Serve(queue chan *Request) { for { req := <-queue go handle(req) // 但不能控制goroutine的数量,会创建大量阻塞的goroutine } } //-------------------------------------------------------------------------------- func Serve(queue chan *Request) { for req := range queue { sem <- 1 // 改进版本 go func(req *Request) { process(req) <-sem }(req) } } //-------------------------------------------------------------------------------- func Serve(queue chan *Request) { for req := range queue { select { case sem <- 1: go func(req *Request) { process(req) <-sem }(req) default: // 丢弃这个request } } }
golang代码 控制并发数
猜你喜欢
转载自www.cnblogs.com/ts65214/p/12976266.html
今日推荐
周排行