golang 并行执行任务的例子

出自 kubernetes/staging/src/k8s.io/client-go/util/workqueue/parallelizer.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()

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,452评论 0 10
  • sync/atomic包提供了原子操作的能力,直接有底层CPU硬件支持,因而一般要比基于操作系统API的锁方式效率...
    坤_7a1e阅读 2,586评论 0 0
  • Go的优点高效垃圾回收机制类型安全和内存安全(没有隐式转换,只能显示转换)快速编译(未使用包检测)轻松实现高并发支...
    Jarily阅读 510评论 0 0
  • Notes Section 2, Program Structure nested block in if-els...
    keysaim阅读 1,187评论 0 1
  • 虽然在前面的文章中有略微记录过一点这部分的内容,但还是单独列出来讲一下吧。 让goroutine退出的方式,有以下...
    睡着别叫醒我阅读 2,333评论 2 3