您如何定义要立即执行的goroutine池?

您如何定义要立即执行的goroutine池?,第1张

您如何定义要立即执行的goroutine池?

我会生成4个工作程序,它们从一个公共通道读取任务。比其他程序更快的Goroutine(因为它们的排定时间不同或碰巧得到简单的任务)将从该通道接收的任务比其他程序更多。除此之外,我将使用sync.WaitGroup等待所有工作人员完成。剩下的只是任务的创建。您可以在此处查看该方法的示例实现:

package mainimport (    "os/exec"    "strconv"    "sync")func main() {    tasks := make(chan *exec.Cmd, 64)    // spawn four worker goroutines    var wg sync.WaitGroup    for i := 0; i < 4; i++ {        wg.Add(1)        go func() { for cmd := range tasks {     cmd.Run() } wg.Done()        }()    }    // generate some tasks    for i := 0; i < 10; i++ {        tasks <- exec.Command("zenity", "--info", "--text='Hello from iteration n."+strconv.Itoa(i)+"'")    }    close(tasks)    // wait for the workers to finish    wg.Wait()}

可能还有其他可能的方法,但是我认为这是一个非常简单易懂的解决方案。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5170059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存