多线程高速下载器,文件下载进度实时预览

多线程高速下载器,文件下载进度实时预览

前言

需要说明的是,对于多线程是否比单线程更能有效提高下载速度,这个是存在争议的,但大体上来看,多线程下载速率不会比单线程下载速率低,不论是从tcp拥塞控制算法,滑动窗口大小,线程抢占带宽,以及服务端限速等哪种角度,均有此结论。对此有兴趣的小伙伴可移步至:

为什么多线程能加速

多线程分块下载能加快下载速度麽

多线程下载一个大文件的速度更快的真正原因是什么?

有不同意见或者观点的小伙伴,也欢迎在评论区留下你的脚步。

重要的东西要放在前面,需要代码的,请直接clone high-speed-downloader,如果方便的话,还请在clone后,给个star,感激不尽

实现方式

采取分段的方式,每段由单个线程下载,下载时会记录下载量,manager负责分发任务,并获取每个任务的实时下载量,图示说明可能更简洁:

在这里插入图片描述

关键点
  1. 多线程实现:manager中有线程池,可为下载任务分配子线程下载片段

  2. 如何统计实时下载进度:每一个任务生成一个上下文,任务上下文携带AtomicLong类型downSize局部变量(用于记录当前任务下载量)。在任务上下文传递至各子线程后,子线程每下载一段,便在downSize基础上累加

  3. 如何确保子线程在线程池环境中,不丢失上下文?:第一种,使用jdk自带的InheritableThreadLocal,但这个类在线程池环境下依然会存在上下文丢失的情况。第二种,使用阿里开源的TransmittableThreadLocal,详细设计可移步至:alibaba/transmittable-thred-local。目前此下载器采取的该方案

总结
不足
  • 暂未实现断点续传功能,这个在单线程场景下比较容易实现,多线程,线程池场景下实现比较麻烦

  • 未实现根据任务配置线程数下载,这个比较容易改进,留给有次需求的小伙伴改进

优点
  • 实现简洁,依赖较少
  • 下载高效,下载状态可实时预览
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值