按照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()
根据文档。
- 1 回答
- 0 关注
- 67 浏览
添加回答
举报
0/150
提交
取消