登录
首页 >  Golang >  Go问答

确保所有劳动力已完成

来源:stackoverflow

时间:2024-03-05 11:36:26 163浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《确保所有劳动力已完成》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

按照 marcio 的线程池实现,是否可以确定所有工作何时完成?

等待 jobqueue 清空是微不足道的:

// wait for the job queue to clear
for len(jobqueue) > 0 {
    // just wait
}

但是之后可能还有 goroutine 等待工人,或者工人还没有完成所有任务:

func (d *Dispatcher) dispatch() {
    for {
        select {
        case job := <-JobQueue:
            // a job request has been received
            go func(job Job) {
                // try to obtain a worker job channel that is available.
                // this will block until a worker is idle
                jobChannel := <-d.WorkerPool

                // dispatch the job to the worker job channel
                jobChannel <- job
            }(job)
        }
    }
}

最好的方法是什么?向调度程序添加一个waitgroup,以及查询waitgroup状态的方法?任何对此的指示将不胜感激。


解决方案


the documentation

waitgroup 等待 goroutine 集合完成。

所以,是的,要等待 goroutines 集合完成,我会推荐 waitgroup。正如文档所述,您为每个启动的工作程序调用 add ,并在每个工作程序完成时调用 done 。您的 for len() 繁忙循环将替换为:

wg.Wait()

根据文档。

终于介绍完啦!小伙伴们,这篇关于《确保所有劳动力已完成》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>