Eliminar directorios secuencialmente o simultáneamente en segundo plano

Eliminar directorios secuencialmente o simultáneamente en segundo plano

Parte de un script que estoy escribiendo se utiliza rm -rfpara eliminar por completo dos directorios.

Estos directorios son relativamente grandes y su eliminación puede llevar un tiempo considerable.

Actualmente los directorios se eliminan de forma secuencial:

rm -rf dir1
rm -rf dir2

¿Sería más rápido eliminarlos simultáneamente en segundo plano mediante:

rm -rf dir1 &
rm -rf dir2 &
wait

Si es así ¿por qué?

Respuesta1

Eso depende.

Si los archivos que se eliminan están en el mismo sistema de archivos y dispositivo de hardware, eventualmente serán secuenciales de todos modos, porque el sistema operativo esperará que el recurso físico realice las operaciones reales en el hardware. Aunque cada instancia de rmpondrá en cola las operaciones para que una esté disponible cuando la otra finalice, no espere una gran mejora con esto.

Si esto rmocurre en archivos que están en 2 dispositivos FS/Hardware diferentes, efectivamente será paralelo y asíncrono, por lo que será el doble de rápido.

Respuesta2

Como dijo alx741, no creo que obtenga ningún beneficio real de una forma u otra a menos que estén en sistemas de archivos separados. Hice algunas pruebas con un archivo de 700 MB. Aquí están mis pruebas que respaldan mis pensamientos. No tengo varias particiones locales con las que jugar, así que no puedo probarlas.

Aquí está como un comando secuencialmente.

time rm -f test.dat1 test.dat2
real    0m0.297s
user    0m0.000s
sys     0m0.295s

Aquí está simultáneamente

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

Aquí están nuevamente en secuencia como dos 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

Respuesta3

Es teóricamente posible que la ejecución simultánea (concurrente/paralela) pueda serMás lento. Es posible que el sistema operativo mantenga cada directorio agrupado. Es decir, los contenidos de dir1podrían tener números de inodo cercanos entre sí y utilizar bloques de datos cercanos entre sí. Y lo mismo podría ser cierto para dir2. Pero el contenido de dir1puede no ser similar al contenido de dir2. (Esto puede depender de la versión del sistema operativo, el tipo de sistema de archivos y el historial de cómo se crearon los directorios). Si este es el caso (los dos directorios no están muy juntos) y el sistema de archivos está en un disco (HDD ) que requiere buscar físicamente cabezales de E/S, entonces la ejecución simultánea podría requerir más búsqueda (→ paliza) que la ejecución secuencial.

información relacionada