golang 实现workqueue

本文介绍了如何利用Go的goroutine和channel轻松构建一个工作队列,以并行执行任务。通过创建一个channel存储任务,多个goroutine从channel中取出任务执行,对比Java展现了Go语言在并发处理上的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

强大的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)
}
~   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值