Warum ist tar|tar so viel schneller als cp?

Warum ist tar|tar so viel schneller als cp?

Zum rekursiven Kopieren eines Verzeichnisses scheint es viel schneller zu sein, tarein Verzeichnis zu packen und die Ausgabe dann zum Entpacken an ein anderes Verzeichnis weiterzuleiten, als (oder ).tarcp -rcp -a

Warum ist das so? Und warum kann man es nicht cpschneller machen, indem man es im Hintergrund genauso macht?

Bearbeiten: Mir ist dieser Unterschied aufgefallen, als ich versucht habe, eine riesige Verzeichnisstruktur mit Zehntausenden tief verschachtelter Dateien und Ordner zu kopieren, die aber insgesamt nur etwa 50 MB groß sind. Ich bin nicht sicher, ob das relevant ist.

Antwort1

Cpführt Öffnen-Lesen-Schließen-Öffnen-Schreiben-Schließen in einer Schleife über alle Dateien aus. Das Lesen von einer Stelle und das Schreiben an eine andere erfolgt also vollständig verschachtelt. Tar|tarführt Lesen und Schreiben in separaten Prozessen aus und verwendet zusätzlich tarmehrere Threads, um mehrere Dateien „auf einmal“ zu lesen (und zu schreiben), wodurch der Festplattencontroller effektiv viele Datenblöcke auf einmal abrufen, puffern und speichern kann. Alles in allem tarermöglicht es, dass jede Komponente effizient arbeitet, während cpdas Problem in unterschiedliche, ineffiziente kleine Teile zerlegt wird.

Antwort2

Ihre Bearbeitung geht in die richtige Richtung: cpist nicht unbedingt langsamer als tar | tar. Hängt beispielsweise von der Menge und Größe der Dateien ab. Für große Dateien cpist ein einfacher am besten, da es sich um eine einfache Aufgabe handelt, Daten herumzuschieben. Für viele kleine Dateien ist die Logistik anders und tarkönnte einen besseren Job machen. Siehe zum Beispieldiese Antwort.

verwandte Informationen