Talvez seja o buffer de stdout que está atrasando a saída. O buffer do pipe pode ser bastante grande , geralmente são várias linhas na melhor das hipóteses . Você pode verificar se consegue desativar .
A compactação de linha por linha não faz nada, pode até aumentar o arquivo. gzip
(com base em DEFLATE ) e a maioria dos outros algoritmos de compactação funcionam em janelas deslizantes que são bastante grandes e também < em> tem para armazenar muitos dados passados (que não estão relacionados ao buffer de saída) para realmente comprimir qualquer coisa - a maior parte da compressão vem de dados anteriores (geralmente indiretamente, você descobre quais sequências são mais comuns e os códigos mais curtos na saída). Há um compromisso entre a taxa de compactação e o consumo de memória e, se você quiser compactar corretamente, precisará de uma estrutura de dados na memória que mantenha o dicionário atual. Ele também funciona em partes, não em byte, então as coisas não avançam até que uma quantidade suficiente de dados seja coletada.
Verifique se os argumentos numerados que definem a taxa de compactação fazem alguma coisa ( gzip -3
para o nível 3 em vez do padrão, que é 6 no meu sistema). Algumas implementações e algoritmos podem ter outras configurações ( bzip2 -s
reduz o uso de memória - experimente, se você tiver em seu sistema).
Em suma, não tenho certeza se gzip
faz qualquer buffer adicional. Eu não verifiquei o código-fonte para a implementação do busybox, mas imagino que não seja muito mais do que o necessário para o algoritmo. Eu realmente suspeito que os buffers de fluxo são o principal gargalo.