kubernetes源码阅读之工具函数Parallelize使用

kubernetes是个开源的容器管理项目,里面有很多很有用的工具函数和工具接口,下面就介绍一下。
第一天先介绍一个并发的工具函数:


package paralize

import (
    "sync"
)

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 wg.Done()
            for piece := range toProcess {
                doWorkPiece(piece)
            }
        }()
    }
    wg.Wait()
}

上面函数是一个简单并发处理函数。下面是个简单的测试函数

a := func(i int) {
        fmt.Println("ok",i)
}
paralize.Parallelize(3,10,a)

这就是一个简单的打印的处理,通过启动三个work去答应10个ok,里面用到golang的WaitGroup,他是一个并发组,通过add和done组合完成并发。

你可能感兴趣的:(Kubernetes)