许多下载管理器都喜欢this , this和this支持通过多个并行连接下载文件,每个线程一个。这个概念是每个连接将分别下载文件的一部分。
例如,如果有 5 个连接,那么第一个连接将下载文件的前 0-20% 部分,第二个连接将下载 20-40% 部分,依此类推。
同样,在服务器端,将有 5 个线程,其中一个线程将并行读取 20% 的文件。
但是,我认为尝试使用多个线程同时读取单个文件实际上会使下载速度明显变慢,因为机械磁盘的读取头将不得不比以前进行更多的寻道。
即使我们假设磁盘控制器队列机制足够智能,可以在一次顺序读取中将所有 5 个多部分请求批处理到一个文件中,但与仅在一个线程中执行读取然后服务于仅通过 1 个 http 连接提交文件。
那么如何更快地并行下载文件呢?
我的理解是,仅当瓶颈是网络连接时,并行下载不同的文件部分才有用:无论是从您下载的服务器的上传带宽,还是服务器与您之间的网络带宽。当这些链路饱和时,可用带宽将在连接之间分配,并且在某些情况下可以在连接之间平均分配。因此,如果您打开了 5 个连接,那么您将获得比只有一个连接更大的带宽份额。
当然,如果服务器和网络以更聪明的方式共享带宽,例如,通过在客户端 IP 之间而不是连接之间分配共享,这将不起作用。
当瓶颈是服务器或客户端上的磁盘 IO 时,这种策略确实无济于事,甚至可能会损害性能,因为读取和写入的顺序性会降低。此外,当瓶颈是您的 ISP 和调制解调器之间的可用带宽时(我想说这可能是最常见的情况),那么并行下载应该既无害也无帮助。
通常,您的系统与磁盘驱动器的连接比网络快得多。即使是一个每秒可以写入 50 兆字节的慢速硬盘驱动器,使用 100兆位连接来跟上多个下载也没有问题。