Perché tar | tar è molto più veloce di cp?


10

Per copiare ricorsivamente una directory, usare tarper comprimere una directory e quindi convogliare l'output in un'altra tarper decomprimere sembra essere molto più veloce dell'uso cp -r(o cp -a).

Perchè è questo? E perché non può cpessere reso più veloce facendolo allo stesso modo sotto il cofano?

Modifica: ho notato questa differenza quando ho provato a copiare un'enorme struttura di directory contenente decine di migliaia di file e cartelle, profondamente annidata, ma per un totale di soli 50 MB. Non sono sicuro che sia pertinente.


Questa è una domanda interessante. Potete trovare alcune risposte qui: stackoverflow.com/questions/316078 e qui: unix.stackexchange.com/questions/66647
Teresa e Junior

Risposte:


6

Cpfa open-read-close-open-write-close in un ciclo su tutti i file. Quindi la lettura da un posto e la scrittura su un altro avvengono completamente interfogliate. Tar|taresegue la lettura e la scrittura in processi separati e inoltre tarutilizza più thread per leggere (e scrivere) diversi file "contemporaneamente", consentendo in modo efficace al controller del disco di recuperare, bufferizzare e archiviare più blocchi di dati contemporaneamente. Tutto sommato, tarconsente a ciascun componente di funzionare in modo efficiente, mentre cpscompone il problema in blocchi disparati, inefficientemente piccoli.


Possiamo davvero dire che è vero per tutte le cpimplementazioni? Come facciamo a sapere che è vero? E perché sarebbe cpscritto in modo così inefficiente? Qualsiasi implementazione da manuale di una copia di file legge un buffer di n byte alla volta e li scrive sul disco prima di leggere altri n byte. Ma stai dicendo che cplegge sempre l'intero file prima di scrivere l'intera copia?
LarsH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.