Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Geschwindigkeit Hauptprogramm Thread Prozess

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
20.10.2005, 20:00 Uhr
Pler
Einer von Vielen
(Operator)


1) Bringt es eigentlich etwas Rechenintensive Programmteile in Threads oder gar extra Prozesse auszulagern?

2)Würde es (wenn denn) noch weitere Vorteile bringen das zu berechnende aufzuteilen, und so beispielsweise 5 Threads laufen zu lassen?

Da gäbs dann ja vielleicht auch wieder was zu unterscheiden:
2a) Die Berechnungen sind unabhänig voneinander
2b) Thread 2 ist immer auf Datennachschub von Thread 1 angewiesen und so weiter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2005, 20:28 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Kommt immer drauf an was genau du machen willst
Wenns grundsätzlich nix bringen würde dann gäbs diese Möglichkeiten ja nit. Wenn du z.B. in deinem Programm was rechenintensives machst solltest du das immer in einem extra Thread machen damit deine GUI bedinfähig bleibt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.10.2005, 21:12 Uhr
Pler
Einer von Vielen
(Operator)


Ja, das mit der lauffähigen Gui ist schon klar. Aber mich würd eben mal interessieren, ob das ganze sonst noch irgendwelche vorteile hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.10.2005, 22:00 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Natürlich. Es kommt halt (wie gesagt) auf das Programm an. Während z.B. der eine Thread noch auf eine Eingabe oder Netzwerkdaten oder sonst was wartet könnte ein anderer schon weiterarbeiten weil er diese Daten nicht braucht...
Dieser Post wurde am 20.10.2005 um 22:01 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.10.2005, 22:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du auf nem multiprozessorsystem arbeitest, sollte er dann z.b auch den 2ten thread o.ä auf den zweiten prozessor verlagern (ka ob das ein os auch so macht, aber ...), so das dann z.b thread1 und thread2 wirklich gleichzeitig laufen, jeweils auf einem prozessor, wodurch sich natürlich die rechenzeit beträchtlich erniedrigt (wenn es halt möglich ist natürlich)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.10.2005, 01:17 Uhr
imhotep
followed the white rabbit



Zitat von Pler:
2)Würde es (wenn denn) noch weitere Vorteile bringen das zu berechnende aufzuteilen, und so beispielsweise 5 Threads laufen zu lassen?

Ein dickes "Kommt drauf an"
Wenn die Synchronisationsarbeit der Aufgabenteilung und Ergebniszusammenführung der Ergebnisse den Geschwinigkeitsvorteil wiederzunichte machen, dann nicht.
Denk mal, dass es sich bei einer Maschine mit nur einem Prozessor nicht lohnt das weiter aufzulösen, da man zuviel Arbeit ins synchronisieren stecken muss. Dann kann man sich nicht darauf verlassen, das die Threads in der Reihenfolge fertig werden, wie mans gern hätte, muss also evtl. sinnlos warte.
Wenn man jedoch das Glück hat, an einem Verteilten System zu arbeiten, ja dann, aber wer hat das schon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.10.2005, 10:32 Uhr
ao

(Operator)


1. Kein Computer rechnet schneller, nur weil mehrere Threads im Spiel sind. Man gewinnt nur zusätzliche Freiheitsgrade und kann die verfügbare Rechenleistung besser verteilen.

2. Multithreading hat grundsätzlich den Nachteil, dass der Verwaltungsaufwand steigt. Die Threads müssen an geeigneten Stellen synchronisiert werden, um den Datenaustausch zu regeln und um Datenobjekte gegen Zugriffskollision zu schützen. Dagegen stehen je nach Anwendungsfall unter Umständen deutliche Vorteile.

3. Die Aufteilung Worker-Thread / GUI-Thread wurde schon beschrieben.

4. Häufig ist nicht allein der globale Datendurchsatz über alles entscheidend, sondern kurze Reaktionszeiten auf bestimmte Ereignisse. Ein einziger Workerthread, der die ganze Arbeit macht, kann, wenn er im falschen Moment am falschen Ort ist, woanders wichtige Dinge verpassen. In vielen Fällen hilft es hier, mehrere Threads so einzurichten, dass jeder Thread eins dieser wichtigen Dinge überwacht und ggfs. schnell reagieren kann.

5. Die Aufteilung einer rechenintensiven Aufgabe auf mehrere Worker-Threads bringt nur dann spürbare Vorteile, wenn der Computer über mehrere Prozessoren verfügt, wenn diese vom Programm / Compiler und vom Betriebssystem unterstützt werden und wenn das Problem sich so aufteilen lässt, dass weitgehend unabhängige Aufgaben entstehen ("Parallelisierbarkeit").

6. Mehrere Prozesse sind die nächste Stufe der Aufteilung. Eine auf mehrere Prozesse verteilte Anwendung ist nicht mehr an eine einzige Maschine gebunden. Hier kann durch Hinzunahme weiterer Computer eine Steigerung der Rechenleistung erreicht werden - Voraussetzung ist aber auch hier eine gute Parallelisierbarkeit der Aufgabe. Der Aufwand zur Verwaltung einer derart verteilten Anwendung ist natürlich erheblich.

6. Die Trennung zwischen Prozessen ist stärker ausgeprägt als zwischen Threads im gleichen Prozess. Konsequenz ist, dass zur Interprozess-Kommunikation in jedem Fall Betriebssystem-Funktionen eingesetzt werden müssen, aber auch, dass Probleme durch konkurrierenden Zugriff auf Datenobjekte ausgeschlossen sind.

So weit erst mal mein Senf

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.10.2005, 11:16 Uhr
Pler
Einer von Vielen
(Operator)


zu 6. (das erste)
Wie würde man günstigerweise die "Quelldaten" auf die verschiedenen rechner verteilen, und wie würden die kommunizieren?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.10.2005, 11:44 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Übers Netzwerk?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.10.2005, 14:54 Uhr
ao

(Operator)



Zitat von Pler:
zu 6. (das erste)
Wie würde man günstigerweise die "Quelldaten" auf die verschiedenen rechner verteilen, und wie würden die kommunizieren?

Da gibts mehrere Möglichkeiten:

1. Über die IPC-(InterProcess Communication)-Dienste von Windows, z.B. Files oder Pipes.
2. Über TCP-Verbindungen
3. Über einen RPC-(Remote Procedure Call)-Dienst, im Fall von Windows wohl COM/DCOM oder SOAP.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: