![]() |
Multithreating
Hallo,
ich habe eine Frage zur Programmstrukturierung. Folgendes Szenario: Es gibt einen Thread der 30 mal in der Sekunde Daten liefert, diese Daten werden 100ms (3 Zyklen)später auf der GUI ausgegeben. Jetzt sollen diese Daten aber noch zwischenverarbeitet werden. Für die Bearbeitung ist ein Zyklus zu kurz. Meine Idee: Die Bearbeitung wird mittels einens Threadpools gemacht, dadurch kann ich die vollen 3 Zyklen zum Bearbeiten nutzen. Was meint ihr? Die Daten werden in einem Array gespeichert. Ich wäre über viele Antworten dankbar. Viele Grüße Bastel |
AW: Multithreating
Gibt es im C# nicht auch sowas, wie eine TQueue? (für die Zwischenspeicherung)
Diese müßte man eventuell nur noch etwas threadsicher machen. Aber ich komm rein rechnerisch nicht ganz klar. Es kommen immer wieder neue Daten an, die Verarbeitng der Daten dauer länger, als die Zeit bis die nächsten Daten eintreffen. Irgendwie bekomm ich da das Gefühl, als wenn da etwas nicht ganz aufgeht. Selbst wenn man die Verarbeitung in einen anderen thread auslagert, wird er dennoch nicht hinterherkommen. Auch mehrere Threads werden nicht ganz klappen, außer daß der Verarbeitungsdurchsatz irgendwann zuviel wird ... je mehr CPUs, um so mehr Sekunden hält das Ganze durch, aber nach spätestens einigen Sekunden ist dann alles so überlastet, das garnichts mehr geht. |
AW: Multithreating
Ja in C# gibt es eine TQueue, was mich hier aber nicht weiterbringt.
Ich dachte mir das so: Wenn ein neuer Datensatz, der noch nicht berechnet ist ankommt, einen Thread aus dem Threadpool bekommt, der in dann berechnte. Nach 3 Zyklen ist das dann berechnet und der Thread wieder frei. So laufen also maximal 3 Verarbeitungsthreads parallel. Oder denke ich da falsch? |
AW: Multithreating
OT ein
Multithreating = Mehrfacher Schadcode??? Multithreading = Mehrere parallele Ausführungstasks OT aus |
AW: Multithreating
Langsam glaube ich, dass schreibt man heutzutage so
![]() |
AW: Multithreating
Zitat:
Ist eine Auswertung parallel zur Erfassung der Daten notwendig? Kann man vielleicht den Algorithmus noch optimieren? P.S.: C# hat zwar eine Queue, aber es gibt auch einen Threadpool ( ![]() Beim Threadpool kannst du auch die maximale Anzahl an Threads festlegen wenn du möchtest, aber er wird keine Aufgabe überspringen. Falls die CPU also zu langsam ist, hinkt die Auswertung irgendwann ziemlich weit hinterher. |
AW: Multithreating
Wenn ich alle X ms neue Daten bekomme, deren Verarbeitung y ms benötigt, dann brauche ich mindestens trunc(0.5+y/x) Kerne. Hier wären das 3. Ist ja klar, denn bei weniger Kernen kommt vorne mehr rein als hinten raus. Damit benötige ich auch 3 Threads, eventuell einen mehr, wegen des Overheads.
Die Queue muss also mindestens so viele Datensätze vorhalten, wie es Threads gibt. Damit kann man bei einem Queue-überlauf sofort abbrechen, denn die Hardware, auf dem die Anwendung läuft, wird das nicht packen. Wenn alle Daten bereits in einem Array vorliegen, solltest Du dir PLINQ anschauen, weil damit das ganze Threadgedöns komplett von C# übernommen wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz