社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
虽然goroutine很廉价,但是有时候还是希望控制goroutine并发数。
来自K8S源代码
k8s.ioclient-goutilworkqueueparallelizer.go
type DoWorkPieceFunc func(piece int)
// Parallelize is a very simple framework that allow for parallelizing
// N independent pieces of work.
func Parallelize(workers, pieces int, doWorkPiece DoWorkPieceFunc) {
toProcess := make(chan int, pieces)
for i := 0; i < pieces; i++ {
toProcess <- i
}
close(toProcess)
if pieces < workers {
workers = pieces
}
wg := sync.WaitGroup{}
wg.Add(workers)
for i := 0; i < workers; i++ {
go func() {
defer utilruntime.HandleCrash()
defer wg.Done()
for piece := range toProcess {
doWorkPiece(piece)
}
}()
}
wg.Wait()
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!