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()

}

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容