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

foreveriuu · · 1744 次点击
<a href="/user/stevewang" title="@stevewang">@stevewang</a> 预测后续3个,是为了利用并发。如果1下载成功后只下载2,那就成单线程了。所以,我就多预测几个,这样2,3,4就能同时下载。
#10
更多评论
stevewang
耶和华是我的牧者,我必不至缺乏。
用channel配合生产者/消费者模式,就可以控制下载的gorountine数目。 大致流程如下: ``` const ( ThreadCount = 3 ) func main() { ch := make(chan string, ThreadCount) var wg sync.WaitGroup for i := 0; i &lt; ThreadCount; i++ { wg.Add(1) go func() { for url := range ch { download(url) } wg.Done() }() } urls := []string{ &#34;http://www.host.com/AAA001.dat&#34;, &#34;http://www.host.com/AAA002.dat&#34;, //... } // 分派下载任务 for _, url := range urls { ch &lt;- url } close(ch) wg.Wait() } ```
#1
多谢解答。但是下载数量未知如何解决呢?比如AAA是到了AAA247.dat,但是预先不知道数量,只有尝试AAA247.dat下载失败才知道需要结束,其它BBB、CCC也是如此。
#2