多线程下载,文件数量未知

foreveriuu · · 1725 次点击
stevewang
耶和华是我的牧者,我必不至缺乏。
死锁是因为close(urllist)在range urllist之后执行,那么range循环就永远不会结束。
#8
更多评论
stevewang
耶和华是我的牧者,我必不至缺乏。
用channel配合生产者/消费者模式,就可以控制下载的gorountine数目。 大致流程如下: ``` const ( ThreadCount = 3 ) func main() { ch := make(chan string, ThreadCount) var wg sync.WaitGroup for i := 0; i < ThreadCount; i++ { wg.Add(1) go func() { for url := range ch { download(url) } wg.Done() }() } urls := []string{ "http://www.host.com/AAA001.dat", "http://www.host.com/AAA002.dat", //... } // 分派下载任务 for _, url := range urls { ch <- url } close(ch) wg.Wait() } ```
#1
多谢解答。但是下载数量未知如何解决呢?比如AAA是到了AAA247.dat,但是预先不知道数量,只有尝试AAA247.dat下载失败才知道需要结束,其它BBB、CCC也是如此。
#2