为了账号安全,请及时绑定邮箱和手机立即绑定

确定所有工人都完成

确定所有工人都完成

Go
SMILET 2023-03-21 16:52:31
按照Marcio 的线程池实现,是否可以确定所有工作何时完成?等待 JobQueue 清空是微不足道的:// Wait for the job queue to clearfor len(JobQueue) > 0 {    // Just wait}然而在那之后可能还有 goroutines 在等待 workers,或者 workers 还没有完成所有的任务: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)        }    }}最好的方法是什么?在dispatcher中添加一个WaitGroup,以及查询WaitGroup状态的方法?对此的任何指示将不胜感激。
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

根据文档

WaitGroup 等待一组 goroutine 完成。

所以,是的,要等待一组 goroutines 完成,我会推荐一个WaitGroup. 正如文档所述,您要求Add每个工作人员开始,以及Done每个工作人员何时完成。您的for len()繁忙循环将替换为:

wg.Wait()

根据文档。


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信