使用下载速度来提高上传速度的算法

时间:2014-11-26 11:25:36

标签: algorithm upload download

我想知道是否有关于在一个方向上使用数据流来增加另一个方向的数据流的主题的任何白皮书或研究。假设我们拥有普通台式计算机的CPU功能和压缩数据。我可以看到两个可能的用例:

  1. 非对称上传/下载速度(至少差异10倍,可能超过100倍)
  2. 仅对单向传输的数据收费
  3. 有两个可能的目标策略:

    1. 使用普通上传和此技术尽快发送一些数据
    2. 尽快发送一些数据,更多针对第二个用例。
    3. 在这个例子中,我们从服务器到客户端有很多带宽,但不是相反。

      我们也将专注于第一个目标策略,因为第二个目标策略实际上只是一个0位响应和一个“无限”的时间来传输任何类型的数据。只需逐个发送所有排列,当客户端获得正确的排列时,它会以0位消息响应。

      我可以想到一些实现这一点的天真方式,例如简单地猜测接下来应该从客户端发送到服务器的数据,向每个数据流发送一个id号,以一些数字为模,例如2 ^ 16,允许一些重叠。如果匹配,客户端只告诉服务器正确块的id号。服务器使用它使用该ID号发送的最后一个块。如果猜测足够好,我们应该能够传输一些数据。

      我猜这可能不是这个问题最好的stackexchange网站,但我无法弄清楚哪一个最合适。我猜StackOverflow,数学,MathOverflow,计算机科学或理论计算机科学。

2 个答案:

答案 0 :(得分:1)

这是一个有趣的想法,但我看到了一些问题/限制:

如果系数大约为100,你可以在发送一个时下载100位,所以如果我们忽略传输开销,延迟等限制,我们可以下载所有4位组合(16 * 4bit = 64),同时上传一位(对于5位,我们需要32 * 5 = 160的因子)。因此,加速的上限将是原始上传速度的4倍。

问题:我认为您的问题与通过IP传输数据有关。

  • 发送这个小型4位软件包的开销将远远高于您获得的内容。
  • 要确定上传位是指哪个4.bit块,您需要在发送4位软件包之间等待可能的上传位,这意味着您必须至少等待两次就是那么高,最终你什么都得不到。

答案 1 :(得分:1)

除非您有预测算法,否则我认为您不会获得太多好处。解释一下,我会用简单的例子来描述你的情况。

假设您的客户端可以发送1位/秒的信息,而具有更多带宽的服务器可以发送8位/秒

如果您的客户端需要发送单个字节并收到确认,则至少需要8秒

  • 客户 - > 1..0..1..1..0..1..0..1 // 8秒发送一个字节
  • 服务器 - > 1 //加上1/8秒获得回复

你的建议是服务器发送数据(查询是否正确),客户端只是回答是或否

  • 服务器 - > 1..0..1..1..0..1..0..1 // 1秒发送一个字节
  • 客户 - > 1 //加1秒钟确认

所以服务器知道客户端,希望发送10110101,这与之前的8相比只需要2秒。

但问题是搜索空间很大(8位组合),所以除非服务器有一个非常好的预测系统,允许它找到最多4次尝试的正确字节,否则服务器需要更多的时间猜测,客户想要什么,而不是客户端首先发送它。示例

  • 服务器 - > (你想发送)00000001?客户 - > 0 //没有
  • 服务器 - > (你想发送)00000010?客户 - > 0 //没有
  • 服务器 - > (你想发送)00000011?客户 - > 0 //没有
  • 服务器 - > (你想发送)00000100?客户 - > 0 //没有
  • 8秒标记!
  • 服务器 - > (你想发送)00000101?客户 - > 0 //没有
  • ....
  • 服务器 - > (你想发送)10110101?客户 - > 1 //是/最差情况是256通信

如你所见,尝试猜测是不值得的。即使你试图将其扩展为替代形式,并发送包含更多数据的块或缓冲区,问题仍然存在。如果信息空间是x位,则客户端必须发送的最小值为x位以确认数据。

避免这种情况的唯一方法是,如果服务器猜测是正确的......但是如果服务器很好地猜测客户想要什么......他可能首先不需要问,那个信息可能是多余的。

所以即使使用这种技术可以进行一些优化。我认为这不是加速通信的可靠方法。

另一个例子

我认为可以更好地总结问题的另一个非计算机/带宽示例

想象一下,我有一堆数字231,594,673,123,167,565,907,450,758,165,你偷看一个,你试着用最少的信息告诉我哪一个。

所以你说it starts with digit 1,但我仍然有123,167,165种可能性,所以你必须说next digit is 6我得到167,165,我仍然不确定一,所以你被迫说ends in 5

此时你已经给了我3位数,我可以指出数字,但是你需要给我所有数字。你可能刚刚告诉我165。基本上,如果您有多个项目,每个项目通过某些属性组合进行区分,则识别单个项目的唯一方法是描述所有属性。最简单直接的只是提供这些信息。任何其他过程只会使情况变得更糟。