Seite 1 von 1

Multihreading > Singlethread?

Verfasst: Fr Mai 11, 2012 6:43 pm
von Kmitska
Moin Leute,

ich hätte da eine Frage zum Thema Multithreading.
Ist es besser ein Programm in diverse Threads aufzuteilen oder doch versuchen bei einem zu bleiben?

Im Moment teile ich es nur, wenn's nötig ist.
Und wird der Computer mehr belastet, wenn ich einen neuen Thread starte?

Re: Multihreading > Singlethread?

Verfasst: Fr Mai 11, 2012 6:52 pm
von cloidnerux
ich hätte da eine Frage zum Thema Multithreading.
Ist es besser ein Programm in diverse Threads aufzuteilen oder doch versuchen bei einem zu bleiben?
Beides. Es hängt davon ab, was du machen willst.
Generell bedeutet Multitasking mehr Verwaltungsaufwand, das Problem ist aber das ALLE Modernen Computer Multicore-Prozessoren haben und da Single-Thread Task eben nur auf einem laufen werden, sprich du wirst nur die Rechenleistung eines einzigen Prozessors nutzen können, was z.B bei einem 32-Core System gerade mal 3,125% wären.
Ein weiteres ist, das alle modernen OS tasks schlafen legen, wenn sie gerade nix zu tun haben oder auf ein Event warten, das hilft Strom und Leistung sparen und verbessert die Perfomance des Computers. Auch kannst du mit Multitasking Programmteile ansprechbar halten, weil du aufwendige Berechnungen in einen anderen Task verschoben hast, dies ist z.B für Oberflächen unabdinglich, weil es meistens schlecht für den Nutzer ist, wenn sich das Programm gar nicht mehr rührt, wenn mal irgendetwas länger als 20ms dauert.

Insgesamt gibt es also nicht viele Argumente die für Single-Thread Programme sprechen, da dieser wirklich nur bei kleinen Dienstprogrammen ohne großen rahmen sinn machen und du eh früher oder später Multitasking benötigst, da dich das OS, deine GUI und die Bedienbarkeit deines Programmes dazu zwingen.

Re: Multihreading > Singlethread?

Verfasst: Sa Mai 12, 2012 9:30 am
von Xin
Kmitska hat geschrieben:Moin Leute,

ich hätte da eine Frage zum Thema Multithreading.
Ist es besser ein Programm in diverse Threads aufzuteilen oder doch versuchen bei einem zu bleiben?
Kommt stark drauf an, was Du tust und welche Hardware Du hast.
Musst Du mehrere Dinge gleichzeitig tun, stellt sich die Frage nicht.
Kannst Du Deine Aufgabe nur Schritt für Schritt hintereinander ausführen, kannst Du sie also nicht parallelisieren, kann macht Parallelisierung natürlich auch keinen Sinn, sondern erzeugt nur zusätzlichen Overhead.
Kmitska hat geschrieben:Und wird der Computer mehr belastet, wenn ich einen neuen Thread starte?
Ja - denn der Thread muss erzeugt und am Schluss wieder vernichtet werden.
Und natürlich machen Threads nur dann Sinn, wenn sie unabhängig voneinander laufen können.

Bei einer Multi-Core-CPU (bzw. Hyperthreading) werden die Threads auf unterschiedliche Kerne verteilt. Hier willst Du die CPU entsprechend mehr auslasten - zum Beispiel indem Du beim Kompilieren, mehr als eine Instanz des Compilers gleichzeitig aufrufst.