this 、 this および this などの多くのダウンロードマネージャーは、スレッドごとに1つずつ、複数の並列接続を介したファイルのダウンロードをサポートしています。コンセプトは、各接続がファイルの一部を個別にダウンロードすることです。
たとえば、5つの接続がある場合、最初の接続はファイルの最初の0〜20%の部分をダウンロードし、2番目の接続は20〜40%の部分をダウンロードします。
同様に、サーバー側には5つのスレッドがあり、1つのスレッドがファイルの20%を並行して読み取ります。
しかし、複数のスレッドで単一のファイルを同時に読み取ろうとすると、ダウンロードが実際に行われると思いました 大幅に遅くなります 。メカニカルディスクの読み取りヘッドは、より多くのシークを実行する必要があるためです。前。
ディスクコントローラーのキューイングメカニズムは、5つのマルチパートリクエストすべてを単一のファイルにまとめて1回のシーケンシャルリードで処理するのに十分インテリジェントであると仮定しても、1回のリードで1回のリードを実行するよりもメリットはありません。スレッドし、1つのhttp接続でファイルを提供します。
それでは、ファイルへの並行ダウンロードはどのように速くなりますか?
異なるファイルパーツを並行してダウンロードすることは、ボトルネックがネットワーク接続(ダウンロード元のサーバーのアップロード帯域幅、またはサーバー上のネットワークの帯域幅)である場合にのみ役立つと私は理解しています。これらのリンクが飽和状態になると、使用可能な帯域幅が接続間で分割され、場合によっては接続間で均等に分割される可能性があります。したがって、5つの接続を開いている場合は、1つしかない場合よりも帯域幅のシェアが大きくなります。
もちろん、これは、サーバーとネットワークがより巧妙な方法で帯域幅を共有している場合(たとえば、接続ではなくクライアントIP間で共有を割り当てる場合)は機能しません。
ボトルネックがディスクIO=サーバーまたはクライアント上にある場合、実際にはこの戦略は役に立たず、読み取りと書き込みのシーケンシャルが少なくなるため、パフォーマンスに悪影響を与える可能性があります。また、ボトルネックがISPとモデムの間の利用可能な帯域幅(おそらく、これがおそらく最も一般的なケースです)の場合、並行ダウンロードは害も助けにもなりません。
一般に、システムはディスクドライブへの接続がネットワークよりもはるかに高速です。毎秒50メガバイトを書き込むことができる低速のハードドライブでも、100メガビット接続を使用した複数のダウンロードに追いつくのに問題はありません。