バックグラウンドでディレクトリを順次削除すると同時にディレクトリを削除する[重複]

バックグラウンドでディレクトリを順次削除すると同時にディレクトリを削除する[重複]

私が書いているスクリプトのいくつかは、rm -rf両方のディレクトリを完全に削除することです。

これらのディレクトリは比較的大きいため、削除するのにかなり長い時間がかかることがあります。

現在、次のディレクトリは順次削除されます。

rm -rf dir1
rm -rf dir2

次の手順でバックグラウンドで同時に削除する方が高速ですか?

rm -rf dir1 &
rm -rf dir2 &
wait

それではなぜ?

答え1

時々違うよね

削除されたファイルが同じファイルシステムとハードウェアデバイスにある場合、オペレーティングシステムは最終的に物理リソースがハードウェアで実際の操作を実行するのを待つため、連続しています。各インスタンスは、rm他のインスタンスが完了したときに1つのインスタンスを使用できるようにタスクをキューに入れますが、これはあまり改善されていないと期待していません。

2つの異なるFS /ハードウェアデバイス上のファイルにこのようなことが発生すると、rm実際には並列で非同期なので、速度が2倍速くなります。

答え2

alx741が言ったように、別のファイルシステムになければ、実質的な利点を得ることができないと思います。 700MBファイルでいくつかのテストを行いました。私のアイデアを裏付けるテストは次のとおりです。作業するローカルパーティションが複数ないため、テストできません。

ここではコマンドで順次実行されます。

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

ここでは、2つの別々のコマンドで並べ替えられます。

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互いに近いアノード番号を有してもよく、互いに近いデータブロックを使用してもよい。についても同じかもしれませんdir2。ただし、 の内容はdir1の内容に近いとは限りませんdir2。 (これは、オペレーティングシステムのバージョン、ファイルシステムの種類、およびディレクトリ作成の履歴によって異なります。)この場合(両方のディレクトリが互いに近いことはありません)、ファイルシステムがディスク(HDD)にある場合は、以下を物理的に照会します。 I/O ヘッダーが必要です。これにより、同時実行には順次実行よりも多くの照会(→スラッシング)が必要になることがあります。

関連情報