123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package workqueue
- import (
- "sync"
- utilruntime "k8s.io/kubernetes/pkg/util/runtime"
- )
- 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)
- 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()
- }
|