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

foreveriuu · · 1672 次点击
<a href="/user/stevewang" title="@stevewang">@stevewang</a> <a href="/user/l603430" title="@l603430">@l603430</a> 我的想法是,每下载成功一个文件,就预测后续的3个文件可能存在,尝试下载。 过程符合要求,就是最后会报deadlock,不知道如何避免这个。
#6
更多评论
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