Wie viele Threads sind nötig, um eine schlechte Wahl zu treffen?

Ich muss ein nicht so großes Programm in C ++ mit boost :: thread schreiben.

Das Problem besteht darin, eine große (möglicherweise Tausende oder Zehntausende. Möglicherweise auch Hunderte und Abermillionen) Anzahl (möglicherweise) großer Dateien zu verarbeiten. Jede Datei ist unabhängig von der anderen und alle befinden sich im selben Verzeichnis. Ich überlege, den Multi-Thread-Ansatz zu verwenden, aber die Frage ist, wie viele Threads soll ich verwenden? Ich meine, welche Größenordnung? 10, 500, 12400 & le;

Es gibt einige Synchronisationsprobleme, jeder Thread sollte eine Struktur von Werten zurückgeben (die für jede Datei akkumuliert werden), und diese werden zu einer "globalen" Struktur hinzugefügt, um die Gesamtdaten abzurufen. Mir ist klar, dass einige Threads aufgrund der Synchronisation "hungrig" werden könnten, aber wenn es sich nur um eine Add-Operation handelt, spielt es dann eine Rolle?

Ich dachte an

for(each file f in directory){

    if (N < max_threads)//N is a static variable controlling amount of threads
         thread_process(f)
    else
       sleep()
}

Dies ist in HP-UX der Fall, aber ich kann es nicht oft testen, da es sich um einen Remote-Server handelt, auf den nicht zugegriffen werden kann.

Antworten auf die Frage(15)

Ihre Antwort auf die Frage