Thread Synchronisation

pl4gu33

Top Contributor
ich versuch gerade ein altes Programm von mir zu verbessern bzw. schneller zu machen....

Das Programm hat folgenden Ablauf:

Man sucht einen Ordner aus, dieser Ordner enthält Dateien und Order. Diese enthaltenen Ordner können wieder Ordner enthalten etc.

Alle Dateien werden nach einem bestimmten Muster umbenannt, da Ordner viele Datein enthalten können, wollte ich nun jedem Ordner/Unterordner einen eigenen Thread geben. (sind maximal 5-6 Ordner) sollte immer noch auf nem Dual- Core schneller sein, als nur ein Thread 😀

mein Code sieht ungefähr so aus, wobei Anwendung ein eigener Thread ist:

Java:
for(int i=0;i<mFile.listFiles().length;i++){
			if(mFile.listFiles()[i].isDirectory()){				
				new Anwendung(mFile.listFiles()[i]).start();
			}else{
				....

nun meine Frage, muss ich hierbei irgendwas Synchronisieren, da ja eigentl. kein Thread auf die Daten des anderen zugreifen und jeder seinen eigenen Ordner bekommt. (Wahrscheinlich ist das schon die Antwort ^^ aber Threads sind schon etwas her daher wollte ich mal nachfragen) 🙂
 
Wenn jeder Thread seine eigenen Instanzvariablen hat, solltest du nichts synchronisieren müssen. Und da auf versch. Ordnern gearbeitet wird, sehe ich da auch keine Zugriffsverletzungen o.ä.
 
Mehrere Threads werden dir höchstwarscheinlich nur geringe Performancevorteile bringen da die Geschwindigkeit in deinem Fall nicht von der CPU sondern vom Dateisystem und der Festplatte abhängig ist.
 
Mehrere Threads werden dir höchstwarscheinlich nur geringe Performancevorteile bringen da die Geschwindigkeit in deinem Fall nicht von der CPU sondern vom Dateisystem und der Festplatte abhängig ist.

Gerade dadurch könenn sie Vorteile bringen, da solange ein Thread auf die Dateioperation wartet ein anderer schon etwas anderes machen kann (zum Beispiel interne Dinge ect.). Das muss natürlich keinen Vorteil bringen aber einen großen Nachteil sehe ich jetzt nicht darin.

Da du in verschiedenen Verzeichnissen arbeitest sehe ich auch keine Synchronisationsprobleme.

Achte nur darauf, dass du nicht doch auf irgend ein globales Element (Liste oder ähnliches whatever) zugreifst!
 
> aber einen großen Nachteil sehe ich jetzt nicht darin.

eine Gefahr ist, man möge mich mechanisch korrigieren, langsameres Lesen durch Hin- und Herspringen auf der Festplatte
 
Ich tippe auch auf 0 Performancegewinn. Den Zugriff auf die langsamste Ressource aufzusplitten....Nö!
Außer du hast 2 verschiedene Festplatten (nicht Partitionen)
 
okay danke, für eure Meinungen zu dem Thema zuerst einmal ging es ja nur um die Synchronisation, die wäre ja nun geklärt 🙂

ob sich das ganze lohnt, werde ich dann wirklich nochmal testen müssen 🙂
 
Was du testen könntest bzgl Synchro ist alle Dateinamen in eine Datei zu schreiben. Vorher zählen und dann nachher die Datei prüfen. Dabei könnte es zu Problemen kommen bei denen man die Synchronisierung einschalten muss.
 

Zurück
Oben