Wie lange dauert die thread-Erstellung und Terminierung unter Windows?

Habe ich gesplittet, eine komplexe array-Verarbeitung Aufgabe in eine Anzahl von threads, um die Vorteile von multi-core-Prozessoren und sehe große Vorteile. Derzeit, zu Beginn die Aufgabe, die ich erstellen des threads, und dann warten, für Sie zu beenden, wie Sie Ihre Arbeit abschließen können. Ich bin in der Regel erstellen etwa vier mal die Anzahl der threads wie Prozessorkerne zur Verfügung stehen, wie jedem thread Haftung zu nehmen, eine unterschiedliche Menge an Zeit, und mit extra threads wird sichergestellt, dass alle Kerne sind besetzt gehalten die meisten der Zeit. Ich Frage mich, wäre es viel von einem performance-Vorteil für die Erstellung des threads, da das Programm feuert up, halten Sie Sie im Leerlauf, bis Sie benötigt, und Sie als ich mit der Verarbeitung beginnen. Einfacher ausgedrückt, wie lange dauert es, um start-und Ende-ein neuer thread über die Verarbeitung in den thread? Ich bin aktuell beginnen die threads mit

CWinThread *pMyThread = AfxBeginThread(CMyThreadFunc,&MyData,THREAD_PRIORITY_NORMAL);

In der Regel werde ich mit 32 threads auf 8 Kerne auf einem 64-bit-Architektur. Der Prozess in Frage, aktuell nimmt < 1 Sekunde, und befeuert wird jedes mal, wenn die Anzeige aktualisiert wird. Wenn sich der Start und das beenden eines thread < 1ms, die Rückkehr rechtfertigen nicht den Aufwand. Ich bin einige Probleme mit der Profilierung dieser.

Einen Verwandte Frage hier hilft, aber ist ein bisschen vage für das, was ich bin nach. Jedes feedback dankbar.

  • Display-refresh-klingt wie ein häufiges Ereignis, es wäre definitiv ein Vorteil bei der Zusammenlegung von threads und halten Sie Sie im Leerlauf, für eine weitere Wiederverwendung. Thread-Erstellung von overhead ist vielleicht nicht etwas zu schwer, aber trotzdem ist die Synchronisation Kosten, es ist virtueller Speicher-Fußabdruck usw.
  • Nicht eine Antwort, die aber mit 32 threads auf 8 Kerne nicht eine gute Lösung, wenn Ihre Aufgabe ist die CPU gebunden. Könnten Sie besser dran, indem eine Zahl, die näher an die Zahl der tatsächlichen hardware-threads, die Sie verwenden können. Ich würde empfehlen die Erstellung eines thread-pool im Voraus, egal, wie viel es braucht, um Sie zu erstellen, möchten Sie vielleicht, um Sie wiederzuverwenden 🙂
  • Ich habe experimentierte mit unterschiedlicher Anzahl von threads, und fand mehr threads als die maximale Parallelität funktioniert am besten in diesem Zusammenhang. Der Grund dafür ist, dass die insgesamt verstrichene Zeit basierend auf, wenn der Letzte thread beendet, und jeder thread hat ein anderes Arbeitspensum, das ist schwer im Vorhinein abzuschätzen. Wenn ich einen thread mit deutlich mehr Arbeit als die anderen, dies verlangsamt den gesamten Prozess mit einem thread nur pro Kern, als die Kerne, haben mit Ihren arbeiten fertig sind untätig.
  • auf die Messung und das Verständnis des Verhaltens.
InformationsquelleAutor SmacL | 2013-08-16
Schreibe einen Kommentar