多线程下载的方法设计

多线程下载的原理是很明白的,不用多说.

但具体细节还是值得研究一下.早些天用Java自制了一个多线程下载,然后用fiddler捉包看了一下IDM的多线程下载方法,发现很不一样.

我自己的做法是把文件分成很多小份,不管有多少个线程.每个线程不断接份额任务,完成了就再接下一份,直到完结.

IDM的做法是多少个线程就平分成多少份,当一个线程完成,就去分担另一个线程的任务.

我设计的时候,觉得分成许多小份的方法记录简单,然而仔细分析,IDM的做法记录也不困难.另外我对网络传输有点理解不透彻.

我们设定Range时,不需要老实的需要多少就设定为多少,直接设定需要的开头就行了,结尾可以到文件最后!因为数据是一点一点传输的,

我们读取了自己需要的分段就可以切断连接,用Java就是关闭流了.

因为不知道服务器会做什么奇怪的事情,Range设定似乎是需要的开头到文件结尾比较好,看起来像单线程的续传.

IDM的做法,记录上的关键在于:若当前所有任务都顺利完成,那么文件下载是完整的!记住这一件事就够了!我们只需要记录当前的所有任务!

有多少线程就有多少任务.

如果要增加线程,或者是一个线程完结了去帮其他线程,那么就改变被帮助线程的任务记录.

减少线程也简单,让记录中的一些任务处于等待就行,有空余线程时,自然会接下等待中的任务.

转载于:https://my.oschina.net/u/3223803/blog/1926813

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值