質問: 例えば、3MB程度のファイルを200個S3にアップロードするような処理を考えます。 その際、直列でアップロードするより、例えば30個ずつ同時に並列でアップロードした方が速くアップロードされるように感じています。 これは、なぜでしょうか。 アップロードの速度やダウンロードの速度は使っているインターネットの回線速度で決まっていて、ボトルネックはそこしか無いと思っていたので、直列でも並列でも変わらないような気がしてしまいますが、実際には並列の方が速い理由が気になっています。 S3の場合だと、ファイルのアップロード以外に認証処理などのオーバーヘッドがあり、それが影響しているのでしょうか。 また、S3に10GBのファイルを1つアップロードするのと、1GBのファイルに分割して並列にアップロードするのでは、どちらが速くなりますでしょうか。
回答: 認証というか、(TCPでの)通信の時は、 ・データを送る(A→B) ・受け取り通知を送る(B→A) ・Bからの受け取り通知をもらってから次のデータを送る(A→B) (以下同様) というやりとりが発生します。ファイル転送の時の話じゃなくてTCP通信一般。 並列で送ると、応答待ちの間にも別のデータを送信できるので、トータルで速くなります。 ファイル転送専用プロトコルであるFTPだと待ちを減らす工夫がありますが、SSHだと多分無い(ちゃんと調べてませんが)。