Mengapa tar | tar jauh lebih cepat daripada cp?

10

Untuk menyalin direktori secara rekursif, menggunakan taruntuk mengemas direktori dan kemudian menyalurkan output ke yang lain taruntuk membongkar tampaknya jauh lebih cepat daripada menggunakan cp -r(atau cp -a).

Kenapa ini? Dan mengapa tidak cpbisa dibuat lebih cepat dengan melakukannya dengan cara yang sama di bawah tenda?

Sunting: Saya perhatikan perbedaan ini ketika mencoba menyalin struktur direktori besar yang berisi puluhan ribu file dan folder, bersarang dalam, tetapi totalnya hanya sekitar 50MB. Tidak yakin apakah itu relevan.

callum
sumber
Itu satu pertanyaan menarik. Anda dapat menemukan beberapa jawaban di sini: stackoverflow.com/questions/316078 dan di sini: unix.stackexchange.com/questions/66647
Teresa e Junior

Jawaban:

6

Cpapakah buka-baca-tutup-buka-tulis-tutup dalam satu lingkaran di atas semua file. Jadi membaca dari satu tempat dan menulis ke tempat lain terjadi sepenuhnya disisipkan. Tar|tartidak membaca dan menulis dalam proses terpisah, dan di samping itu tarmenggunakan beberapa utas untuk membaca (dan menulis) beberapa file 'sekaligus', secara efektif memungkinkan pengontrol disk untuk mengambil, buffer dan menyimpan banyak blok data sekaligus. Secara keseluruhan, tarmemungkinkan setiap komponen untuk bekerja secara efisien, sementara cpmemecah masalah dalam potongan kecil yang berbeda dan tidak efisien.

Pum Walters
sumber
Bisakah kita benar-benar mengatakan itu benar untuk semua cpimplementasi? Bagaimana kita tahu itu benar? Dan mengapa cpditulis dengan cara yang tidak efisien? Setiap implementasi buku teks dari salinan file membaca buffer n byte pada suatu waktu, dan menulisnya ke disk sebelum membaca n byte lainnya. Tapi maksudmu cpselalu membaca seluruh file sebelum menulis seluruh salinan?
LarsH