Mehrere Threads nutzen



  • Hallo.
    Ich wollte mal fragen, ob es nötig ist mehrere Threads zu nutzen.
    Erst grad hab ich hier gelesen, dass z.B. für das Laden von Ressourcen mehrere Threads benutzt werden. Oder in der Bullet-Engine(die benutze ich) bietet es sich auch an, auf mehreren Threads zu arbeiten.
    Also, was sind die Vor-und Nachteile(ist es überhaupt nötig)? Und wie lässt sich das am besten umsetzen, bzw. für welche Zwecke?
    Danke.



  • Ich wollte mal fragen, ob es nötig ist mehrere Threads zu nutzen.

    Nein, ist nicht noetig. Ansonsten: http://de.wikipedia.org/wiki/Softwareseitiges_Multithreading

    Also, was sind die Vor-und Nachteile(ist es überhaupt nötig)? Und wie lässt sich das am besten umsetzen, bzw. für welche Zwecke?

    Selbst eine nicht ganz so umfassende Antwort fuellt Buecher. Nutze eine naheliegende Bibliothek! Die gibt es auch im Internet.



  • Danke.
    Selbst die schlicht und einfache Meinung reicht mir schon aus 😃
    Da vertrau ich mal auf den mit mehr Erfahrung als ich.

    Edit: Und trotzdem danke für den Link.



  • Schreib erstmal dein Singlecore Programm und wenn es sich dann lohnt mach es Multithreaded.



  • Skym0sh0 schrieb:

    Schreib erstmal dein Singlecore Programm und wenn es sich dann lohnt mach es Multithreaded.

    Ja, aber werds dann wahrscheinlich auch so lassen.
    Wird auch mein erstes fertiges Projekt sein, also egal.



  • Das ist eine sehr allgemeine Frage.

    Grundsätzlich würde ich sagen gibt es 2 Gründe mehrere Threads zu nutzen:

    1. Mehr Leistung. Auf einen Multiprozessorsystem werden Threads auf verschiedene Prozessoren Verteilt. Wenn mehrere Threads zur Berechnung genutzt werden läuft die Berechnung entsprechend schneller.

    2. Für Parallelität. Besonders in der GUI Programmierung hat man oft das Problem dass während einer längeren Berechnung die GUI "einfriert" und nciht mehr reagiert wenn die Berechnung im Main-Thread läuft. Deshalb packt man die Berechnung (oder das Laden von Ressourcen) in einen extra Thread, dann kann man im Mainthread gleichzeitig noch etwas anderes machen, z.B. auf Eingaben reagieren oder einen Ladescreen anzeigen.

    Wie es sich am besten umsetzen lässt hängt von vielen Faktoren ab.
    Als entsprechende Funktionen würde ich die aus der STL (für C++11) oder Boost empfehlen. Allerdings nur wenn es denn wirklich nötig ist, single-threaded reicht für den Anfang vollkommen aus.



  • DarkShadow44 schrieb:

    Das ist eine sehr allgemeine Frage.

    Grundsätzlich würde ich sagen gibt es 2 Gründe mehrere Threads zu nutzen:

    1. Mehr Leistung. Auf einen Multiprozessorsystem werden Threads auf verschiedene Prozessoren Verteilt. Wenn mehrere Threads zur Berechnung genutzt werden läuft die Berechnung entsprechend schneller.

    2. Für Parallelität. Besonders in der GUI Programmierung hat man oft das Problem dass während einer längeren Berechnung die GUI "einfriert" und nciht mehr reagiert wenn die Berechnung im Main-Thread läuft. Deshalb packt man die Berechnung (oder das Laden von Ressourcen) in einen extra Thread, dann kann man im Mainthread gleichzeitig noch etwas anderes machen, z.B. auf Eingaben reagieren oder einen Ladescreen anzeigen.

    Wie es sich am besten umsetzen lässt hängt von vielen Faktoren ab.
    Als entsprechende Funktionen würde ich die aus der STL (für C++11) oder Boost empfehlen. Allerdings nur wenn es denn wirklich nötig ist, single-threaded reicht für den Anfang vollkommen aus.

    Also wenn es jetzt z.B. genau den gleichen Prozessor in Singlecore und Dualcore gäbe und deine Anwendung kein Multithreading nutzt, wird es genau gleich schnell laufen 😮 ?


  • Mod

    coder++ schrieb:

    Also wenn es jetzt z.B. genau den gleichen Prozessor in Singlecore und Dualcore gäbe und deine Anwendung kein Multithreading nutzt, wird es genau gleich schnell laufen 😮 ?

    Wenn man mal so Dinge wie Multitasking auf OS-Ebene (also mehrere Prozesse, die gleichzeitig CPU-Last erzeugen) vernachlässigt: Ja, natürlich. Ein Bauarbeiter braucht für eine Grube eine halbe Stunde. Wie lange braucht er, wenn nebenan noch ein anderer Bauarbeiter steht und Pause macht?



  • Hmm..okay.
    Dann werd ich mich halt früher oder später damit beschäftigen.



  • Aber Achtung, das ist in vielen Belangen kein triviales Thema. Und die theoretische n-fache Geschwindigkeitbei n-Threads/Prozessoren wird auch in Professionellen Anwendungen nicht erreicht.

    Um da mal ein paar Stolersteine zu nennen:
    - Cache Kohärenz verhindert Speed (z.B durch False Sharing)
    - Ungleiche Load Balance verhindert Maximalspeed (durch z.B. blödes Scheduling ausgelöst, weil Lokalität nicht/kaum genutzt wird)
    - Falsche oder schlechte Benutzung von Multithreading selbst (alles immer und immer wieder locken usw.)
    - Hardware Überforderung (Multithreading Programm bei Singlecore CPU z.B., aber das wird heutzutage weniger vorkommen)



  • Skym0sh0 schrieb:

    - Cache Kohärenz verhindert Speed (z.B durch False Sharing)
    - Ungleiche Load Balance verhindert Maximalspeed (durch z.B. blödes Scheduling ausgelöst, weil Lokalität nicht/kaum genutzt wird)
    - Falsche oder schlechte Benutzung von Multithreading selbst (alles immer und immer wieder locken usw.)
    - Hardware Überforderung (Multithreading Programm bei Singlecore CPU z.B., aber das wird heutzutage weniger vorkommen)

    Ein weiterer, nicht zu vernachlässigenden Grund ist, dass viele ihr Wissen komplett überschätzen und es gerade im Bereich Multithreading vor Halbwissen nur so wimmelt.



  • @false knowledge sharing
    +1

    Wobei die Auswirkung davon meist nicht nur ist dass das resultierende Programm langsamer läuft als es laufen könnte, sondern dass es nicht korrekt arbeitet.
    (Manchmal laufen diese inkorrekten Programme sogar ne Spur schneller als jedes korrekte Programm laufen könnte.)



  • SeppJ schrieb:

    Ein Bauarbeiter braucht für eine Grube eine halbe Stunde. Wie lange braucht er, wenn nebenan noch ein anderer Bauarbeiter steht und Pause macht?

    👍 🙂



  • Gut, gut.
    Dann werd ich Multithreading für die Zukunft erstmal auslassen 😃

    Erst wenn ich mir sicher sein kann, mich gut genug damit auszukennen, sehe ich weiter.


Anmelden zum Antworten