Tại sao tar | tar nhanh hơn nhiều so với cp?


10

Để sao chép đệ quy một thư mục, sử dụng tarđể đóng gói một thư mục và sau đó chuyển đầu ra sang một thư mục khác tarđể giải nén dường như nhanh hơn nhiều so với sử dụng cp -r(hoặc cp -a).

Tại sao lại thế này? Và tại sao không cpthể được thực hiện nhanh hơn bằng cách thực hiện theo cách tương tự dưới mui xe?

Chỉnh sửa: Tôi nhận thấy sự khác biệt này khi cố gắng sao chép một cấu trúc thư mục khổng lồ chứa hàng chục nghìn tệp và thư mục, được lồng sâu, nhưng tổng cộng chỉ khoảng 50MB. Không chắc chắn nếu điều đó có liên quan.


Đó là một câu hỏi thú vị. Bạn có thể tìm thấy một số câu trả lời tại đây: stackoverflow.com/questions/316078 và tại đây: unix.stackexchange.com/questions/66647
Teresa e Junior

Câu trả lời:


6

Cpkhông mở-đọc-đóng-mở-ghi-đóng trong một vòng lặp trên tất cả các tệp. Vì vậy, đọc từ nơi này và viết đến nơi khác xảy ra xen kẽ đầy đủ. Tar|tarkhông đọc và ghi trong các quy trình riêng biệt, ngoài ra, tarsử dụng nhiều luồng để đọc (và ghi) một số tệp 'cùng một lúc', cho phép bộ điều khiển đĩa tìm nạp, đệm và lưu trữ nhiều khối dữ liệu cùng một lúc. Tất cả trong tất cả, tarcho phép mỗi thành phần hoạt động hiệu quả, trong khi cpphá vỡ vấn đề trong các phần nhỏ khác nhau, không hiệu quả.


Chúng ta thực sự có thể nói điều đó đúng với tất cả các cptriển khai không? Làm thế nào để chúng ta biết điều đó đúng? Và tại sao sẽ cpđược viết theo cách không hiệu quả như vậy? Bất kỳ việc thực hiện sách giáo khoa nào của một bản sao tệp đều đọc một bộ đệm gồm n byte tại một thời điểm và ghi chúng vào đĩa trước khi đọc n byte khác. Nhưng bạn đang nói cpluôn đọc toàn bộ tập tin trước khi viết toàn bộ bản sao?
LarsH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.