A diferença de desempenho entre um comando que faz a mesma coisa

0

Qual é a diferença? É realizado no mesmo?

tar -czf files/compressed/gzip/archive.tar.gz -C files/original .

tar -c -C files/original . | gzip -1 > files/compressed/gzip/archive.tar.gz
    
por Lajdák Marek 30.07.2015 / 15:18

3 respostas

4

No primeiro, a implementação do tar usa uma biblioteca gzip para realizar a própria compactação. No segundo, a saída do tar é canalizada para um executável separado que executa a compactação. O primeiro é provavelmente um pouco mais eficiente, pois não envolve chamadas extras do sistema para gravar / ler os dados de / para o canal, mas um ser humano provavelmente não notaria a diferença.

    
por 30.07.2015 / 15:28
6

Vamos fazer alguns testes.

tar sozinho:

time sh -c 'tar -czf test.tar.gz ~/Downloads'
tar: Removing leading '/' from member names
=====
JOB sh -c 'tar -czf test.tar.gz ~/Downloads'
74%    cpu
30.02s real
20.64s user
1.82s sys

tar pipe para gzip :

time sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
tar: Removing leading '/' from member names
=====
JOB sh -c 'tar -c ~/Downloads | gzip -1 > test.tar.gz'
65%    cpu
27.23s real
16.07s user
1.88s sys

Parece-me razoável que o tar pipe para gzip possa ser mais rápido porque eles foram executados em paralelo na máquina com vários núcleos (o meu tem 2 CPUs).

    
por 30.07.2015 / 18:40
1

Na segunda opção, há dois aplicativos que precisam ser iniciados ( tar e gzip ). Isso leva tempo extra. Além disso, a tubulação leva recursos extras. Isso resulta em um tempo de execução mais longo.

    
por 30.07.2015 / 15:35