Parte de um script que estou escrevendo utiliza rm -rf
para remover completamente dois diretórios.
Esses diretórios são relativamente grandes e podem levar um tempo considerável para serem removidos.
Atualmente os diretórios são removidos sequencialmente:
rm -rf dir1
rm -rf dir2
Seria mais rápido removê-los simultaneamente em segundo plano por meio de:
rm -rf dir1 &
rm -rf dir2 &
wait
Se sim, por que?
Responder1
Depende.
Se os arquivos removidos estiverem no mesmo sistema de arquivos e dispositivo de hardware, eles eventualmente serão sequenciais de qualquer maneira, porque o sistema operacional aguardará o recurso físico para realizar as operações reais no hardware. Embora cada instância rm
enfileirará as operações para que uma esteja disponível quando a outra terminar, não espere uma grande melhoria com isso.
Se rm
ocorrer em arquivos que estão em 2 dispositivos FS/Hardware diferentes, será efetivamente paralelo e assíncrono, portanto será duas vezes mais rápido.
Responder2
Como alx741 disse, não acho que você obterá nenhum benefício real de uma forma ou de outra, a menos que estejam em sistemas de arquivos separados. Fiz alguns testes com um arquivo de 700 MB. Aqui estão meus testes que apoiam meus pensamentos. Não tenho várias partições locais para brincar, então não posso testar isso.
Aqui está como um comando sequencialmente.
time rm -f test.dat1 test.dat2
real 0m0.297s
user 0m0.000s
sys 0m0.295s
Aqui está simultaneamente
time rm -f test.dat1 &
time rm -f test.dat2 &
real 0m0.145s
user 0m0.000s
sys 0m0.144s
real 0m0.150s
user 0m0.000s
sys 0m0.150s
Aqui eles estão em sequência novamente como dois comandos separados.
time rm -f test.dat1
time rm -f test.dat2
real 0m0.146s
user 0m0.000s
sys 0m0.146s
real 0m0.153s
user 0m0.000s
sys 0m0.152s
Responder3
É teoricamente possível que a execução simultânea (concorrente/paralela) possa serMais devagar. É concebível que o sistema operacional mantenha cada diretório em cluster. Ou seja, o conteúdo de dir1
pode ter números de inode próximos uns dos outros e usar blocos de dados próximos uns dos outros. E o mesmo pode ser verdade para dir2
. Mas o conteúdo de dir1
pode não estar próximo do conteúdo de dir2
. (Isso pode depender da versão do sistema operacional, do tipo de sistema de arquivos e do histórico de como os diretórios foram criados.) Se for esse o caso (os dois diretórios não estão próximos um do outro) e o sistema de arquivos estiver em um disco (HDD ) que requer busca física de cabeças de E/S, então a execução simultânea pode exigir mais busca (→ thrashing) do que a execução sequencial.