摘录·多线程下载是如何提速的
date
Jul 15, 2023
slug
howtoimprovedownloadspeed
status
Published
tags
计算机基础
summary
type
Post
【原文连接】:多线程下载如何实现
网速带宽固定,为什么多线程下载可以提速?
这是一个比较有意思的问题了,最大网速是固定的,运营商给你 100Mbs 的网速,不管你怎么使用,速度最大也就是 100/8=12.5MB/S. 既然瓶颈在这里,为什么多线程下载可以提速呢?其实理论上来说,单线程下载就可以达到最大网速。但是往往事实是网络不是那么通畅,十分拥堵,很难达到理想的最大速度。也就是说只有在网络不那么通畅的时候,多线程下载才能提速。否则,单线程即可。不过最大速度永远都是网络带宽。
那为什么多线程下载可以提速呢?HTTP 协议在传输时候是基于 TCP 协议传输数据的,为了弄明白这个问题需要了解一下 TCP 协议的拥塞控制机制。拥塞控制 是 TCP 的一个避免网络拥塞的算法,它是基于和性增长 / 乘性降低这样的控制方法来控制拥塞的。
简单来说就是在 TCP 开始传输数据时,服务端会不断的探测可用带宽。在一个传输内容段被成功接收后,会加倍传输两倍段内容,如果再次被成功接收,就继续加倍,直到发生了丢包,这是这也被叫做慢启动。当达到 ** 慢启动阀值(ssthresh)** 时,满启动算法就会转换为线性增长的阶段,每次只增加一个分段,放缓增加速度。我觉得其实慢启动的加倍增速过程并不慢,只是一种叫法。
但是当发生了丢包,也就是检测到拥塞时,发送方就会将发送段大小降低一个乘数,比如二分之一,慢启动阈值降为超时前拥塞窗口的一半大小、拥塞窗口会降为 1 个 MSS,并且重新回到慢启动阶段。这时多线程的优势就体现出来了,因为你的多线程会让这个速度减速没有那么猛烈,毕竟这时可能有另一个线程正处在慢启动的在最终加速阶段,这样总体的下载速度就优于单线程了。