首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行文件下载

并行文件下载
EN

Stack Overflow用户
提问于 2021-02-20 20:48:48
回答 3查看 645关注 0票数 2

这是一个基本的问题,但我希望有人有更多的网络经验,提供一个更全面的答案。

假设我在外部服务器上有3个文件,每个文件为1GB。为了下载,我会这样做:

代码语言:javascript
复制
$ wget https://server.com/file1.mov

在并行执行这三个项方面(例如,在三个单独的选项卡/shell/线程中),或者以串联方式执行,例如:

代码语言:javascript
复制
$  wget https://server.com/file1.mov \
&& wget https://server.com/file2.mov \
&& wget https://server.com/file3.mov \

在下列情况下:

  1. 我有一个非常快的本地下载连接,而且服务器的速度要慢得多(例如,假设生成每个文件需要服务器15 s)。
  2. 我的本地下载连接很慢,服务器上传带宽要快得多。
  3. 两者相对来说是一样的。

对于第一种情况,我们显然希望使用并行下载,如果外部服务器上的开销是固定的,那么对于另外两种情况,为什么其中一种会比另一种更好呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-28 11:24:54

对于所有这三种情况,实际结果取决于若干限制因素。您已经列出了下载和上传带宽,但是瓶颈也可能出现在磁盘I/O、CPU和RAM以及数据传输协议和其他方面。

通常,分段文件传输是获取数据的一种较好方式,因为它减少了TCP拥塞控制(假设我们使用TCP协议)和异构环境的影响。正如“跨广域网传输高带宽数据的应用技术”(Jason Lee,Dan Gunter,Brian Tierney)中所述,论文:

TCP通过不断增加窗口大小来探测连接的可用带宽,直到丢包为止,这时它会将窗口切成两半,然后开始“加高”连接。带宽延迟产品越高,这种提升所需的时间就越长,可用带宽的持续时间也就越少。“

“为了改善这种网络成为瓶颈的情况,可以使用并行流。该技术是通过将要传输的数据划分为N个部分并用单独的TCP连接传输每个部分来实现的。N个并行流的效果是将单个流所经历的带宽延迟乘积减少一个N的因子,因为它们都共享单流带宽(u)。对于Q (<0.001)的合理值的随机分组丢失通常一次发生在一个流中,因此,当它们与拥塞链路上的连接竞争时,它们对总吞吐量的影响将降低,每个并行流将不太可能被选择来丢弃它们的分组,因此必须通过过早避免拥塞或慢启动的潜在带宽的总数量被减少。

值得一提的是,拥塞算法在带宽分配中起着重要的作用,但仍然需要根据网络的“类别”进行设置。宽带、卫星、3G、WiFi --它们都有物理环境决定的特性,而且CWND的实现表现也不同。

另一个需要考虑的问题是拥挤网络中并行和并发数据传输的行为。从理论上讲,传输的数据越多,就越有可能阻塞网络并激活ISP端的策略,从而开始丢弃或形成连接。然而,即使在这种情况下,用几个小的并行链接交换数据的概率也比一个大的连接高。

同样,这是一个非常通用的解释,连接吞吐量可能会因各种因素而有很大差异。还可能发现自己处于这样一种情况,即单个连接将执行与多线程相同的功能,同时不需要额外的工作和代码来实现。

票数 2
EN

Stack Overflow用户

发布于 2021-02-28 21:17:29

tl;博士:TCP拥塞控制

解释

真正的答案是,这几乎不重要!

创建TCP会话后,TCP将处理带宽,并尝试使用拥塞控制机制达到最大速度:

传输控制协议(TCP)使用一种网络拥塞避免算法,该算法包括加性增加/乘性减少(AIMD)方案的各个方面,以及包括慢启动和拥塞窗口在内的其他方案,以实现拥塞避免。

拥塞避免既可以是线路上两个数据包之间的“真正”拥塞,也可以是数据包丢失,因为您的CPU/NIC/其他东西无法处理数据包带宽。

,为什么这几乎不重要?

这是因为在某些情况下,由于两个并行会话,我们可能会出现拥塞。

下面是一个愚蠢的例子,它将解释为什么它会很重要:

带宽为8位/秒的计算机可以尝试创建并行会话。一旦他同时发送"SYN“,就会出现拥塞。由于8位是此特定计算机可以发送的数据包的最小位,因此拥塞将不允许计算机使用因特网。

票数 2
EN

Stack Overflow用户

发布于 2021-02-26 23:27:18

根据您的TCP窗口功能/方法,总是使用并行下载会更快。

另外,如果某个中间节点(接入点/交换机/路由器/防火墙/代理)饱和。它得丢几个包。

他们做这件事的最简单的方法就是甩尾。但是防火墙和路由器也可以有更复杂的流量塑造器。

如果您尝试并行下载,并且带宽在其他通信量之间共享,则生成更多的数据包或更多的连接(用于每个连接流量整形),这样就可以获得一定的速度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66296395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档