依序刪除目錄與在背景同時刪除目錄

依序刪除目錄與在背景同時刪除目錄

我正在編寫的腳本的一部分用於rm -rf完全刪除兩個目錄。

這些目錄相對較大,可能需要相當長的時間才能刪除。

目前,這些目錄是按順序刪除的:

rm -rf dir1
rm -rf dir2

透過以下方式在背景同時刪除它們會更快嗎?

rm -rf dir1 &
rm -rf dir2 &
wait

如果是這樣為什麼?

答案1

這取決於。

如果被刪除的檔案位於相同的檔案系統和硬體設備中,那麼它們最終將是連續的,因為作業系統將等待實體資源在硬體中執行實際操作。儘管每個實例rm都會對操作進行排隊,以便在另一個完成時可用,但不要指望由此帶來很大的改進。

如果rm發生在 2 個不同 FS/硬體設備中的檔案上,它將實際上是並行和非同步的,因此速度會提高兩倍。

答案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

在這裡,它們再次按順序排列為兩個單獨的命令。

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 頭,那麼同時執行可能需要比順序執行更多的查找(→ 顛簸)。

相關內容