Hallo Java-Gemeinde
ich habe folgendes Problem:
Ein Messgerät liefert alle 10ms Messwerte. Ich Frage die Schnittstelle alle 100ms ab und schicke die ca. 10 Daten in einer ArrayList via Observer Muster an 2 Observer: Ein Diagramm und einen Analyzer.
Jeder Messwert wird vom Analyzer geprüft und alle paar Sekunden muss eine Berechnung gemacht werden. Auf lahmen Rechnern stockt nun das Diagramm verständlicherweise kurz wenn eine Berechnung angestpoßen wird, da alles in einem Thread stattfindet.
Deshalb habe ich den Analyzer als Deamon mit geringer Priorität realisiert, der alle X (zb 50, 300) ms (sleep) den Eingangspuffer kontrolliert und dann alle Messwerte durchgeht und ggf berechnet. Der Eingangspuffer besteht aus Vectoren (Threadsafe, performancemäßig wohl nicht der Hit sollte aber OK sein in diesem Fall?!), die eben immer über die Observermethode gefüttert werden. Zusätzlich "blockiere" ich den Analyzer (einfach wieder sleep), wenn der Puffer gerade geschrieben wird (die Observermethode die ArrayList an die Puffervectoren hängt). Auch wenn ich den Haupt/Grafikthread auf hohe Priotität setze ändert sich am Fluss des Diagramms gar nichts; es stockt genauso dann, wenn der Analyzer einen Umschwung in den Daten dedektiert und eine Berechnung anstößt. Das kapiere ich nicht... während der Berechnung müsste doch eigentlich der Thread mit höherer Priorität den Diagrammfluss erhöhen.
Kann mit jemand Tipps für den Fehler / eine bessere Architektur / Performanceoptimierung geben?
Ist es evtl notwendig/möglich immer mal wieder wähnrend der Berechnung den Analyzer schlafen zu legen / zu yielden?
ich habe folgendes Problem:
Ein Messgerät liefert alle 10ms Messwerte. Ich Frage die Schnittstelle alle 100ms ab und schicke die ca. 10 Daten in einer ArrayList via Observer Muster an 2 Observer: Ein Diagramm und einen Analyzer.
Jeder Messwert wird vom Analyzer geprüft und alle paar Sekunden muss eine Berechnung gemacht werden. Auf lahmen Rechnern stockt nun das Diagramm verständlicherweise kurz wenn eine Berechnung angestpoßen wird, da alles in einem Thread stattfindet.
Deshalb habe ich den Analyzer als Deamon mit geringer Priorität realisiert, der alle X (zb 50, 300) ms (sleep) den Eingangspuffer kontrolliert und dann alle Messwerte durchgeht und ggf berechnet. Der Eingangspuffer besteht aus Vectoren (Threadsafe, performancemäßig wohl nicht der Hit sollte aber OK sein in diesem Fall?!), die eben immer über die Observermethode gefüttert werden. Zusätzlich "blockiere" ich den Analyzer (einfach wieder sleep), wenn der Puffer gerade geschrieben wird (die Observermethode die ArrayList an die Puffervectoren hängt). Auch wenn ich den Haupt/Grafikthread auf hohe Priotität setze ändert sich am Fluss des Diagramms gar nichts; es stockt genauso dann, wenn der Analyzer einen Umschwung in den Daten dedektiert und eine Berechnung anstößt. Das kapiere ich nicht... während der Berechnung müsste doch eigentlich der Thread mit höherer Priorität den Diagrammfluss erhöhen.
Kann mit jemand Tipps für den Fehler / eine bessere Architektur / Performanceoptimierung geben?
Ist es evtl notwendig/möglich immer mal wieder wähnrend der Berechnung den Analyzer schlafen zu legen / zu yielden?
Zuletzt bearbeitet: