私が書いているスクリプトのいくつかは、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 ヘッダーが必要です。これにより、同時実行には順次実行よりも多くの照会(→スラッシング)が必要になることがあります。