我正在編寫的腳本的一部分用於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 頭,那麼同時執行可能需要比順序執行更多的查找(→ 顛簸)。