Verzeichnisse sequenziell vs. gleichzeitig im Hintergrund entfernen

Verzeichnisse sequenziell vs. gleichzeitig im Hintergrund entfernen

Ein Teil eines Skripts, das ich schreibe, dient rm -rfzum 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 rmdie 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 rmbei 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 dir1kö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 dir1kö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.

verwandte Informationen