Ein Teil eines Skripts, das ich schreibe, dient rm -rf
zum vollständigen Entfernen zweier Verzeichnisse.
Diese Verzeichnisse sind relativ groß und das Entfernen kann viel Zeit in Anspruch nehmen.
Aktuell werden die Verzeichnisse nacheinander entfernt:
rm -rf dir1
rm -rf dir2
Wäre es schneller, sie gleichzeitig im Hintergrund zu entfernen über:
rm -rf dir1 &
rm -rf dir2 &
wait
Wenn ja warum?
Antwort1
Es kommt darauf an.
Wenn sich die zu entfernenden Dateien im selben Dateisystem und auf demselben Hardwaregerät befinden, werden sie letztendlich sowieso sequentiell ausgeführt, da das Betriebssystem auf die physischen Ressourcen wartet, um die eigentlichen Vorgänge auf der Hardware auszuführen. Obwohl jede Instanz rm
die Vorgänge in die Warteschlange stellt, sodass einer verfügbar ist, wenn der andere fertig ist, sollten Sie davon jedoch keine große Verbesserung erwarten.
Wenn dies rm
bei Dateien auftritt, die sich auf zwei verschiedenen FS/Hardwaregeräten befinden, erfolgt es effektiv parallel und asynchron und ist daher doppelt so schnell.
Antwort2
Wie alx741 schon sagte, glaube ich nicht, dass Sie auf die eine oder andere Weise wirkliche Vorteile haben werden, es sei denn, sie befinden sich auf separaten Dateisystemen. Ich habe einige Tests mit einer 700 MB großen Datei durchgeführt. Hier sind meine Tests, die meine Gedanken bestätigen. Ich habe nicht mehrere lokale Partitionen zum Spielen, also kann ich das nicht testen.
Hier ist es als ein Befehl in Folge.
time rm -f test.dat1 test.dat2
real 0m0.297s
user 0m0.000s
sys 0m0.295s
Hier ist es gleichzeitig
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
Hier sind sie noch einmal der Reihe nach als zwei separate Befehle aufgeführt.
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
Antwort3
Theoretisch ist es möglich, dass die gleichzeitige (gleichzeitige/parallele) AusführungLangsamer. Es ist denkbar, dass das Betriebssystem jedes Verzeichnis gruppiert hält. D. h., der Inhalt von dir1
könnte Inode-Nummern haben, die nahe beieinander liegen, und Datenblöcke verwenden, die nahe beieinander liegen. Dasselbe könnte für gelten dir2
. Aber der Inhalt von dir1
könnte nicht nahe beieinander liegen wie der Inhalt von dir2
. (Dies kann von der Betriebssystemversion, dem Dateisystemtyp und dem Verlauf der Erstellung der Verzeichnisse abhängen.) Wenn dies der Fall ist (die beiden Verzeichnisse liegen nicht nahe beieinander) und sich das Dateisystem auf einer Platte (HDD) befindet, die physisch nach E/A-Köpfen suchen muss, dann könnte die gleichzeitige Ausführung mehr Suchvorgänge (→ Thrashing) erfordern als die sequentielle Ausführung.