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

巧铃


首先,你需要先了解进程和线程。线程是操作系统操作的最小单元,进程则是操作系统运行的基本单元,一个进程可以有多个线程,线程共享进程的资源,也有自己独立数据空间,多线程可以提升处理效率。多线程下载一个大文件快的原理就是这个原因,单进程单线程相当于有一个人在处理,单进程多线程相当于有很多人在处理,所以处理的更快。


Java学习爱好者


你好,我在做一个项目的时候,商户也问过下载问题,我根据个人经验来总结一下。

主要通过已下3点来阐述一下:

1、延迟高的情况下

一个TCP连接要占满线路带宽,需要有足够大的TCP window,通常超过默认的TCP window上限,需要通过TCP window scale扩展来增加window大小。当年的操作系统对window scale的支持不太好,增加TCP连接数相当于变相增大window。

2、操作系统的TCP

流控实现不太合理的时候,遇到丢包可能速度会掉得很快,多个连接可以缓解这个问题,至少看到速度比较平缓,不会一下掉一半。

3、网站限制

某些网站限制了单个TCP连接的速度,或者本身因为实现问题单个TCP连接就有性能上限(比如错误地使用了很小的buffer来做IO),多个连接也就可以增加性能。

综合以上实际中出现的问题,总结为“多线程下载一个大文件的速度更快”这句话本质上来说就是错误的。

如有不同观点可以联系,大家一起共同探讨一下!


超哥爆电商


可以把要下载的文件看做是一桶水

当使用单线程下载的时候就只有一个水龙头放水,速度就会很慢。

但是如果我们多增加几个水龙头同时打开,效果就不一样了。

传统的单线程现在工作流程像上图一样。

多线程下载就不一样了,同样的东西更多的线程可以极大的提高下载速度。

为每个线程分配开始位置和结束位置。

如图所示线程1分配1-3,线程2分配4-6,线程3分配7-9,每一个线程下载对应位置的文件。数据下载回来后拼合起来就可以得到完整的数据了。

为了浅显易懂这是一个最简单的比喻。

其实真正的多线程下载还牵涉很多其他方面的技术问题。例如;任务分配、文件写入、文件大小的获取、断点续传、代码实现、下载状态等等一系列的东西。


五竹叔


线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配。不难理解,如果你线程多的话,那下载的越快。现流行的下载软件都支持多线程。

注意:实现多线程的条件是服务器支持单一IP多线程下载,如果不支持的话,很有可能封IP或者是只有一个线程能连接成功,多余线程被屏蔽。部分软件提供"用代理下载"方式,这种方式不会封IP。


sshxh001


这就像,串联和并联的区别吧,比如一个队伍,通过一座桥,这桥有几个分支,然后你将队伍按照番号级别划分,分批次从不同的分之过桥,和只经过一个分支一点一点走要快的多吧,这个的例子就是淮海战役的第一阶段的东线。


二十二号同学


一条马路十辆车要排队很慢,十条马路十辆车很快,不需要排队


丙戌年


你可以简单理解为单线程下载是一个人搬运10吨货物,多线程下载是10个人搬运10吨货物