Многие менеджеры закачек любят этот, этот и этот поддержка загрузки файла через несколько параллельных подключений, по одному на поток. Идея состоит в том, что при каждом подключении одна часть файла будет загружаться отдельно.
Например, если есть 5 соединений, то первое соединение будет загружать первую часть файла 0-20%, второе соединение загрузит часть 20-40% и так далее ..
Точно так же на стороне сервера будет 5 потоков, из которых один поток будет читать 20% файла параллельно.
Но я думал, что попытка одновременного чтения одного файла с несколькими потоками на самом деле приведет к загрузке значительно медленнее, поскольку считывающей головке механического диска придется выполнять больше поисков, чем раньше.
Даже если мы предположим, что механизм постановки в очередь контроллера диска достаточно умен, чтобы объединить все 5 составных запросов в один файл за одно последовательное чтение, это не даст нам никаких преимуществ перед чтением в одном потоке и последующим обслуживанием файл через 1 http-соединение.
Так как же ускорить параллельную загрузку в файл?
Насколько я понимаю, параллельная загрузка разных частей файла полезна только тогда, когда узким местом является сетевое соединение: либо пропускная способность сервера, с которого вы загружаете, либо пропускная способность сети между сервером на вас. Когда эти каналы переполнены, доступная полоса пропускания будет разделена между соединениями, а в некоторых случаях может быть разделена поровну между соединениями. Таким образом, если у вас открыто 5 подключений, вы получите большую долю пропускной способности, чем если бы у вас было только одно.
Конечно, это не сработает, если сервер и сеть совместно используют полосу пропускания более разумным способом, например, путем распределения доли между IP-адресами клиентов вместо соединений.
Когда узким местом является дисковый ввод-вывод на сервере или клиенте, тогда эта стратегия действительно не поможет и даже может нанести вред производительности, поскольку операции чтения и записи будут менее последовательными. Кроме того, когда узким местом является доступная пропускная способность между вашим интернет-провайдером и модемом (что я бы сказал, возможно, наиболее распространенный случай), тогда параллельные загрузки не должны ни навредить, ни помочь.
В общем, ваша система имеет гораздо более быстрое соединение с диском, чем сеть. Даже медленный жесткий диск, который может записать 50 мегабайты в секунду не будет проблем с несколькими загрузками, используя 100-мегабайтныйнемного подключение.