Untuk menyalin direktori secara rekursif, menggunakan tar
untuk mengemas direktori dan kemudian menyalurkan output ke yang lain tar
untuk membongkar tampaknya jauh lebih cepat daripada menggunakan cp -r
(atau cp -a
).
Kenapa ini? Dan mengapa tidak cp
bisa 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.
Jawaban:
Cp
apakah 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|tar
tidak membaca dan menulis dalam proses terpisah, dan di samping itutar
menggunakan 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,tar
memungkinkan setiap komponen untuk bekerja secara efisien, sementaracp
memecah masalah dalam potongan kecil yang berbeda dan tidak efisien.sumber
cp
implementasi? Bagaimana kita tahu itu benar? Dan mengapacp
ditulis 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 maksudmucp
selalu membaca seluruh file sebelum menulis seluruh salinan?