golang 实现workqueue

    xiaoxiao2021-03-26  19

    强大的gorouting 和channle可以很轻松的实现一个 workqueue 来并行的执行任务,思路:可以将将要执行的任务放到一channel, 然后创建多个go routing 去chnanel 取任务执行, 可以看下是不是要比java方便好多。 package main import ( "fmt" "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) wg := sync.WaitGroup{} wg.Add(workers) for i := 0; i < workers; i++ { go func(i int) { defer wg.Done() fmt.Printf("worker %v is working\n", i) for piece := range toProcess { fmt.Printf("to be done no: %v\n", len(toProcess)) doWorkPiece(piece) } }(i) } wg.Wait() } func main() { processNode := func(i int) { fmt.Printf("process i:%v\n", i) } Parallelize(16, 100, processNode) } ~
    转载请注明原文地址: https://ju.6miu.com/read-659682.html

    最新回复(0)