ทำไม tar | tar เร็วกว่า cp มาก


10

สำหรับการคัดลอกไดเรกทอรีซ้ำใช้tarการแพ็คอัพไดเร็กทอรีแล้วไพพ์เอาต์พุตไปยังอีกอันtarเพื่อคลายแพ็คดูเหมือนว่าจะเร็วกว่าการใช้cp -r(หรือcp -a)

ทำไมนี้ และทำไมไม่cpทำเร็วขึ้นด้วยวิธีเดียวกันภายใต้ประทุน?

แก้ไข: ฉันสังเกตเห็นความแตกต่างนี้เมื่อพยายามคัดลอกโครงสร้างไดเรกทอรีขนาดใหญ่ที่มีไฟล์และโฟลเดอร์นับหมื่นไฟล์ซ้อนกันอย่างล้ำลึก แต่มีขนาดประมาณ 50MB เท่านั้น ไม่แน่ใจว่าเกี่ยวข้องหรือไม่


นั่นเป็นคำถามที่น่าสนใจ คุณสามารถหาคำตอบได้ที่นี่: stackoverflow.com/questions/316078และที่นี่: unix.stackexchange.com/questions/66647
Teresa e Junior

คำตอบ:


6

Cpไม่ open-read-close-open-write-close ในลูปของไฟล์ทั้งหมด ดังนั้นการอ่านจากที่หนึ่งและการเขียนไปยังที่อื่นจึงเกิดขึ้นได้อย่างสมบูรณ์ Tar|tarทำการอ่านและเขียนในกระบวนการที่แยกกันและนอกจากนี้ยังtarใช้หลายเธรดเพื่ออ่าน (และเขียน) หลาย ๆ ไฟล์ 'พร้อมกัน' ได้อย่างมีประสิทธิภาพช่วยให้ตัวควบคุมดิสก์สามารถดึงบัฟเฟอร์และจัดเก็บข้อมูลหลายบล็อกในครั้งเดียว ทั้งหมดtarช่วยให้แต่ละส่วนประกอบทำงานได้อย่างมีประสิทธิภาพในขณะที่cpแยกแยะปัญหาโดยแยกชิ้นส่วนที่มีขนาดเล็กอย่างไม่มีประสิทธิภาพ


เราสามารถพูดได้ว่ามันเป็นความจริงของcpการใช้งานทั้งหมด เราจะรู้ได้อย่างไรว่ามันเป็นเรื่องจริง? และทำไมcpต้องเขียนด้วยวิธีที่ไม่มีประสิทธิภาพเช่นนี้? การนำตำราไปใช้ในการคัดลอกไฟล์อ่านบัฟเฟอร์ครั้งละ n ไบต์และเขียนลงดิสก์ก่อนอ่านอีกหนึ่งไบต์ แต่คุณกำลังบอกว่าcpจะอ่านไฟล์ทั้งหมดก่อนที่จะเขียนสำเนาทั้งหมด?
LarsH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.