Mehre Dateien parallel kopieren mit Multithreading

markus2510

Mitglied
Hallo,

Fällt euch da irgendwas ein was man bezüglich Synchronisierung berücksichtigen muß oder brauch ich jede Kopieraktion einfach nur in separate Threads packen? Dass nicht mehrere Threads dieselbe Datei kopieren wollen schließ ich hier jetzt mal aus.

Lg, Markus
 

Tarrew

Top Contributor
Wenn verschiedene Threads verschiedene Dateien kopieren, wird es nicht zu Deadlocks o.Ä. kommen, da musst du nichts beachten.

Du solltest aber beachten, dass das Ganze eher langsamer und nicht schneller wird.
File I/O zu parallelisieren macht eher wenig Sinn (wenn von der gleichen Platte gelesen / auf die gleiche Platte geschrieben wird).
 

markus2510

Mitglied
Hallo,

Ok, d.h. wenn die ziele der kopieraktionen auf einer anderen platte liegen könnte man das kopieren durch multithreading beschleunigen?

Lg, markus
 

Tarrew

Top Contributor
Angenommen du hast 4 Platten A, B, C und D.

Dann kopierst du eine Datei von A auf B und eine weitere Datei von C auf D.
Das kannst du parallelisieren. Das wird auch schneller, als wenn es hintereinander läuft.

Wenn du aber nur zwei Platten A und B hast und vier Dateien von A auf B kopieren willst, dann solltest du das nicht parallelisieren. Das Lesen und Schreiben auf Platten ist ein serieller Vorgang und wenn sich der Kopf der Festplatte (im Falle einer HDD), immer neu ausrichten muss, weil zwischen den Dateien hin und hergesprungen wird, dann ist das ein massiver Overhead und es wird nur langsamer. Auch bei SSD's machts keinen Sinn.
 

markus2510

Mitglied
Ok, das klingt plausibel. Aber warum wird das dann bei robocopy so als superfeature hervorgehoben und die leute bemerken beim backup einen geschwindigkeitszuwachs? Sicher, muss alles nicht unbedingt stimmen, aber trotzdem interessanter sachverhalt.
 

Tarrew

Top Contributor
Das Ganze kann natürlich schneller werden, wenn der File IO nicht dein Bottleneck ist sondern die CPU oder Ähnliches.
Das ist aber eher selten der Fall. Wenn ich ein bisschen google, dann finde ich leute, bei denen die Performance mit 8 Threads wenige % besser ist, aber auch viele Leute, wo die Geschwindigkeit abnimmt (nämlich genau dann, wenn die Platte eh schon der Bottleneck ist).

Dazu noch:
I think you will find a HUGE improvement when running robocopy in mirror mode, robocopy is checking each file serially to compare size/timestamps etc to work out *IF* it needs to copy the file over. During these checks there is little disk I/O.

Now running these types of checks in multithreaded mode will see huge speed increases to the overall job time, as its checking 8 (more if you increase the MT count) files at a time, rather than one.

While this won’t make the disk throughput any faster, it will allow one ‘thread’ to do a disk copy while the other 7 threads continue on checking for file changes. Resulting in a reduced job time for mirrored jobs not requiring a a huge data copy over the wire.
https://www.faqforge.com/windows/robocopy-single-and-multithreaded-benchmark-on-windows-7/

Auch lesenswert:
https://softwareengineering.stackexchange.com/questions/123029/multithreaded-file-copy
 

JStein52

Top Contributor
Im übrigen wäre es ja eine dankbare Aufgabe wenn du das Ganze einfach mal ausprogrammierst und selber testest welche Theorie denn nun stimmt.
 

Dukel

Top Contributor
Es kommt darauf an. Wenn man wenige große Dateien hat lohnt sich Paralellisierung nicht aber wenn man viele kleine Dateien kopieren möchte wird es sich sicher lohnen.
Ich würde dies mit den Entsprechenden Dateien und z.B. mit Robocopy verifizieren. Dort wird die Geschwindigkeit angegeben und man kann diese dann vergleichen. Dabei ist wichtig, dass man Caches nicht berücksichtigt und z.B. den Rechner zwischen den Versuchen neu startet.
 

Flown

Administrator
Mitarbeiter
wenn man viele kleine Dateien kopieren möchte wird es sich sicher lohnen.
Worauf fußt denn diese Behauptung? Denn:
Das Lesen und Schreiben auf Platten ist ein serieller Vorgang und wenn sich der Kopf der Festplatte (im Falle einer HDD), immer neu ausrichten muss, weil zwischen den Dateien hin und hergesprungen wird, dann ist das ein massiver Overhead und es wird nur langsamer. Auch bei SSD's machts keinen Sinn.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Mehre While-Schleifen hintereinander Java Basics - Anfänger-Themen 13
M Frameworks - mehre Wege zum Ziel? Java Basics - Anfänger-Themen 9
P Mehre Werte schnell erstellen Java Basics - Anfänger-Themen 8
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
MiMa Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
O Java Dateien verschlüsseln? Java Basics - Anfänger-Themen 22
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
J Laden von Dateien Java Basics - Anfänger-Themen 19
I Xml dateien zusammenfügen Java Basics - Anfänger-Themen 12
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben