Удалять каталоги последовательно или одновременно в фоновом режиме

Удалять каталоги последовательно или одновременно в фоновом режиме

Часть скрипта, который я пишу, использует 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), который требует физического поиска головок ввода-вывода, то одновременное выполнение может потребовать большего поиска (→ перегрузки), чем последовательное выполнение.

Связанный контент