Это хорошая идея, чтобы загрузить несколько файлов параллельно?

307
mans

Я разрабатываю приложение для загрузки нескольких больших файлов на сервер из домашней сети.

Я могу выбрать любую из следующих стратегий:

  1. Загрузите каждый файл в последовательности.
  2. Загрузите их все параллельно.

который быстрее, отмечая, что узким местом является домашняя сеть.

2
Попробуйте оба и измерить результаты? multithr3at3d 6 лет назад 4
@ multithr3at3d Мой тест был бы с одной позиции, и я хотел бы узнать общую концепцию, которая была бы применима везде. mans 6 лет назад 0
@man - «везде» чрезвычайно широк. Кроме того, вы недооцениваете достоверность такого теста. То, что относится к вашему соединению, в основном относится ко всем, в любом случае Ramhound 6 лет назад 0
Пожалуйста, измените вопрос, чтобы ограничить его конкретной проблемой с достаточным количеством деталей, чтобы найти адекватный ответ. Ramhound 6 лет назад 0
Вы загружаете на «сервер». Что вы знаете о сервере? Есть ли вероятность, что это действительно ферма серверов, где параллельные соединения действительно идут на разные IP-адреса? Scott 6 лет назад 0
@ Scott На самом деле это ферма серверов (облачный сервер Google). Вносит ли он какие-либо изменения? mans 6 лет назад 0

3 ответа на вопрос

4
Spiff

Параллельная загрузка, как правило, помогает ускорить их все, потому что, если по какой-либо причине один из ваших потоков TCP закачки будет остановлен, другие ваши потоки закачки TCP смогут не допустить потери этой полосы пропускания.

В основном тот же ответ, что и мой, но более компактный. :П LPChip 6 лет назад 0
@LPChip * «В основном тот же ответ, что и мой» * - Первое предложение вашего ответа противоположно этому ответу. Так вы думаете, что противоположные ответы одинаковы? sawdust 6 лет назад 0
1
Damian T.

Теоретически, ответом будет:

Шесть из одного; полдюжины другого.

Причина в том, что если вы достигаете узкого места в пропускной способности, не имеет значения, загружаете ли вы файлы по одному или несколько одновременно; вы ограничены пропускной способностью.

Что меняет ответ, так это ограничение скорости для соединений на одной стороне. Это видно на некоторых обычных контент-серверах, а также на тех, которые используют протокол Torrenting.

В этом случае, если установленный предел скорости меньше максимальной полосы пропускания на домашней стороне, то имеет смысл передавать несколько файлов, вплоть до суммы, ограничивающей полосу пропускания на домашней стороне.

-1
LPChip

В вашем случае может потребоваться последовательная загрузка.

Потребительское оборудование не всегда способно выполнять много одновременных подключений и может зависнуть / зависнуть. Если вы ограничите количество одновременных файлов, то параллельная загрузка будет всегда быстрее.

Причина в следующем:

Когда вы делаете перевод с использованием TCP / IP, происходит следующее:

Сначала один пакет отправляется адресату, и соединение ожидает возврата пакета подтверждения, прежде чем отправит следующий пакет.

Затем он отправляет 2 пакета и ожидает подтверждения. Затем он отправляет 3, затем 4, затем 5 и т. Д. Он продолжает увеличивать количество пакетов, пока возвращенный пакет подтверждения не покажет, что не все пакеты были получены. Когда это происходит, скорость снижается и пробуется снова.

Раньше случалось так, что, когда вышеупомянутое случалось, это начинало с 1 снова и увеличивало скорость. Более новая технология уменьшает вдвое количество пакетов и пытается снова, постепенно увеличивая скорость.

Учитывая, что с дополнительным трафиком пропускная способность для этой передачи может быть уменьшена, весьма вероятно, что полная скорость не поддерживается все время.

Если одновременно передаются 2 или более файлов, доступная пропускная способность используется более эффективно. Если одна передача останавливается, и скорость значительно снижается, то существует момент, когда освобождается полоса пропускания, которая не используется этой передачей. Другие процессы могут поглотить эту пропускную способность, делая передачу еще более медленной. Но если передается 2 или более файлов, более вероятно, что объединенная скорость более или менее будет оставаться неизменной, а это означает, что даже если одна из передач была замедлена, другая передача, вероятно, получит эту оставшуюся полосу пропускания.

* «Когда это происходит, скорость снижается и пробуется снова ... наращивать скорость ... постепенно увеличивая скорость ... скорость значительно снижается» * - К какой этой «скорости» вы относитесь? Получите настолько технический, насколько вам угодно, я справлюсь. sawdust 6 лет назад 1
@sawdust Transferspeed. Передача осуществляется путем разбивки всего на части небольшими партиями пакетов. Допустим, с точки зрения непрофессионалов, у вас есть пропускная способность для 400 пакетов одновременно. Первый 1 пакет отправлен, так что есть место для еще 399 пакетов, но они не используются. Затем 2, затем 4, затем 6, затем 10, затем 15 .. 400 из 400. Теперь делается попытка получить пакет из 420, но в подтверждении говорится, что последние 20 пакетов не поступили. Таким образом, он повторяет эти 20 пакетов и ограничивает количество пакетов до 210. Таким образом, скорость уменьшается почти вдвое, потому что могло бы быть место для еще 190 пакетов. LPChip 6 лет назад 0
Ваше объяснение не имеет смысла. Ethernet IEEE 802.3 не имеет возможности передавать * «400 одновременно пакетов» *. Он не использует пропускную способность для передачи любых одновременных кадров. Скорость передачи данных фиксируется, когда PHY согласовывают, но вы подразумеваете, что TCP может понизить эту скорость? sawdust 6 лет назад 2