Часть скрипта, который я пишу, использует rm -rf
для полного удаления двух каталогов.
Эти каталоги относительно большие, и их удаление может занять значительное время.
В настоящее время каталоги удаляются последовательно:
rm -rf dir1
rm -rf dir2
Будет ли быстрее удалить их одновременно в фоновом режиме с помощью:
rm -rf dir1 &
rm -rf dir2 &
wait
Если да, то почему?
решение1
Это зависит.
Если удаляемые файлы находятся в одной файловой системе и на одном аппаратном устройстве, они в конечном итоге будут последовательными в любом случае, поскольку операционная система будет ждать физического ресурса для выполнения фактических операций на оборудовании. Хотя каждый экземпляр rm
будет ставить операции в очередь, чтобы одна была доступна, когда другая завершится, не ожидайте от этого большого улучшения.
Если операция rm
выполняется с файлами, находящимися в двух разных файловых системах/аппаратных устройствах, она фактически будет параллельной и асинхронной, поэтому будет выполняться в два раза быстрее.
решение2
Как сказал alx741, я не думаю, что вы получите какую-либо реальную выгоду так или иначе, если они не находятся на отдельных файловых системах. Я провел некоторые тесты с файлом размером 700 МБ. Вот мои тесты, которые подтверждают мои мысли. У меня нет нескольких локальных разделов, с которыми можно было бы поиграться, поэтому я не могу это проверить.
Здесь это как одна команда последовательно.
time rm -f test.dat1 test.dat2
real 0m0.297s
user 0m0.000s
sys 0m0.295s
Здесь это одновременно
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
Здесь они снова приведены последовательно как две отдельные команды.
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
решение3
Теоретически возможно, что одновременное (конкурентное/параллельное) выполнение может бытьпомедленнее. Вполне возможно, что операционная система может сохранять каждый каталог кластеризованным. То есть содержимое dir1
может иметь номера inode, которые близки друг к другу, и использовать блоки данных, которые близки друг к другу. И то же самое может быть верно для dir2
. Но содержимое dir1
может не быть близко к содержимому dir2
. (Это может зависеть от версии операционной системы, типа файловой системы и истории создания каталогов.) Если это так (два каталога не близки друг к другу), а файловая система находится на диске (HDD), который требует физического поиска головок ввода-вывода, то одновременное выполнение может потребовать большего поиска (→ перегрузки), чем последовательное выполнение.