golang代码 控制并发数
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
}
}
}