按照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 關注
- 83 瀏覽
添加回答
舉報
0/150
提交
取消