Für die Verteilung auf die Threads hat Uwe ja schon eine Lösung genannt. Da reicht es die Indizes irgendwie zu verteilen, egal ob auf dem Weg oder anders, da die Liste bei reinen Lesezugriffen threadsicher ist.
Ich habe eine TObjectList die eine Dateiliste repräsentiert.
Ich möchte basierend auf dieser Liste gerne Threads erstellen.
Beispielzahlen: 1000 Dateien, 8 Threads. Jeder Thread verarbeitet 125 Dateien.
Wie stellt man das am besten an? Ich meine nicht rechnerisch sondern das Erstellen der Threads, ohne temporäre Zwischenlisten.
Temporäre Zwischenlisten sind bei normalen Festplatten der bessere Weg. Ein Thread geht die Liste durch, lädt nur stur die Dateien und übergibt diese geladen an die Threads zur Verarbeitung. So kann man die Leserate der Festplatte am besten ausnutzen.
Denn wenn du einfach nur auf 8 Threads verteilst, wird das ganze eher noch langsamer als vorher, wenn die Verarbeitung einer Datei nicht gerade ein Vielfaches der Lesezeit von der Festplatte benötigt.
Bei SSDs könnte man auch beim Lesen der Dateien parallele Zugriffe versuchen, aber auch nicht unbeschränkt viele, da kommt es auf die Größe der Dateien an wo hier Optimierungspotential ist.
Man könnte auch mit MMFs arbeiten um Windows so eine Optimierung der Zugriffe zu ermöglichen, wenn es sich um große Dateien handelt.