Parte de un script que estoy escribiendo se utiliza rm -rf
para 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 rm
pondrá en cola las operaciones para que una esté disponible cuando la otra finalice, no espere una gran mejora con esto.
Si esto rm
ocurre 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 dir1
podrí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 dir1
puede 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.