2 Stimmen

Gute Verwendung von Fäden?

Ich habe eine Reihe von Operationen, die sehr kostspielig sind, aber alle sind ziemlich eigenständig. Einige von ihnen verlassen sich auf einige "globale" Zustände oder Daten, aber alle sehr viel read-only. Die Operationen selbst, da bin ich mir ziemlich sicher, können alle parallel ausgeführt werden, aber alle Operationen müssen abgeschlossen sein, bevor das Programm über einen bestimmten Punkt hinaus fortschreitet.

Lohnt es sich, die zusätzliche Arbeit und die Gefahr von Multithreading hier hinzuzufügen, zumal der Hauptthread ohnehin blockieren und warten muss?

Das andere Problem ist, dass diese Anwendung höchstwahrscheinlich sowohl unter Windows als auch unter Linux laufen muss, und ich bin mir nicht sicher, ob es die Komplexität wert ist, Code hinzuzufügen, der zwei verschiedene Threading-Systeme verwendet.

5voto

Jon Skeet Punkte 1325502

Nun, die erste Frage lautet: Haben Sie tatsächlich ein Problem?

Es hört sich so an, als könnte man das sicherlich einigermaßen sicher und effizient parallelisieren, aber wenn es sich nicht gerade um eine Problem zu warten, bis die Vorgänge in Serie ausgeführt werden, ist es vielleicht nicht sinnvoll, sich darüber Gedanken zu machen.

Wenn es sich um eine Batch-Anwendung handelt, die z. B. über Nacht ausgeführt wird, lohnt sich dies wahrscheinlich nicht. Handelt es sich jedoch um eine benutzerorientierte Anwendung, bei der die Benutzer das Warten satt haben, könnte sich der Einsatz von Multi-Threading lohnen, um das Problem zu lösen.

4voto

chaos Punkte 118918

Sofern es sich bei Ihren Worker-Threads nicht um eine Reihe pathologischer Fälle handelt, die keine Vorteile aus der Parallelisierung ziehen, werden sie wahrscheinlich schneller parallel als seriell abgearbeitet. Die Frage, ob es sich lohnt, hängt also davon ab, wie viel Zeit Sie dadurch sparen und wie viel Ihnen das im jeweiligen Kontext wert ist. Wenn ein Benutzer ungeduldig auf einen Mausklick wartet, um etwas zu tun, dann ist eine Zeitersparnis von 5 von 10 Sekunden ein bedeutender Vorteil. Die gleiche Einsparung bei einem Cron-Job ist nicht so viel wert.

Wenn Sie glauben, dass es eine gute Chance gibt, dass es etwas Nützliches für Sie tut, erstellen Sie eine schnelle Testversion und Profil erstellen .

2voto

Ben S Punkte 66945

Was Sie da beschreiben, ist eine Barriere in Bezug auf die Gleichzeitigkeit und ist in vielen Arten von Anwendungen sehr beliebt.

Ob es für Ihre Anwendung geeignet ist, lässt sich ohne nähere Angaben nur schwer sagen.

1voto

Mike Dunlavey Punkte 39339

Wenn Sie über Mehrkernprozessoren verfügen, können Sie möglicherweise Threads gleichzeitig ablaufen lassen und durch Parallelisierung eine Beschleunigung erzielen.

Ich glaube jedoch, dass der Hauptnutzen von Threads darin besteht, dass mehrere logische Aktionsketten leichter geschrieben werden können, insbesondere wenn sie das Warten auf externe Ereignisse wie Benutzereingaben oder den Abschluss von E/A beinhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X