Hallo! Wenn man große Mengen von Daten schnell lesen will und diese dann einem anderen Programm zur Verfügung stellen möchte, zur Auswertung und Speicherung, kann man dies ja mit einem Ringbuffer aus Shared Memory machen. Der Vorteil ist so hat man auch gleich einen Buffer wenn kurzzeitig die Auswertung und das Schreiben mal länger braucht. Welche anderen Konzepte gibt es aber ohne Shared Memory?
Dateien, Datenbanken, Interprozesskommunikation (Pipes, Sockets, was auch immer). Solange Du "große Mengen" und "schnell" nicht quantifizierst, lässt sich da nicht präziseres zu sagen.
Suchender schrieb: > Welche > anderen Konzepte gibt es aber ohne Shared Memory? die Frage ist warum es überhaupt 2 Programm sind. Wenn es ein Programm ist fällt der datenaustausch komplett weg.
Rufus Τ. Firefly schrieb: > Solange Du "große Mengen" und "schnell" nicht quantifizierst, lässt sich > da nicht präziseres zu sagen. Ca 100MB/s kommen von ADCs. Die Daten sollen aber nicht in einer Datenbank oder so gespeichert werden. Das Konzept verschiedener Programme soll erhalten bleiben indem ein Programm die Daten zur Verfügung stellt und je nach Anforderung ein anderes Programm dann diese Daten analysiert und speichert.
Suchender schrieb: > Das Konzept verschiedener > Programme soll erhalten bleiben indem ein Programm die Daten zur > Verfügung stellt und je nach Anforderung ein anderes Programm dann diese > Daten analysiert und speichert. Und warum? Man muss damit immer 2 Programme pflegen wenn man etwas an den Datenstrukturen ändert. Beide Programm müssen die Zugriff Synchronisieren. Beide Programm können nicht getrennt von einander laufen. Auch die Fehlersuchen in 2 Programmen mit dem Debugger ist aufwendiger. 2 Programm haben nur dann eine Vorteil wenn sie auf verschiedenen Rechnern laufen. Dann würde ich lieber 2 Libs schreiben die von einem Programm geladen werden.
Peter II schrieb: > Und warum? Man muss damit immer 2 Programme pflegen wenn man etwas an > den Datenstrukturen ändert. Beide Programm müssen die Zugriff > Synchronisieren. Beide Programm können nicht getrennt von einander > laufen. Kein Warum. So soll es nunmal sein... Mit dem Shared Memory kann aber z.b das datenliefernde Programm schon alleine laufen lassen nur durch den Ringbuffer gehen die Daten dann eben schnell verloren. Die Synchronisierung klappt da auch sehr gut wenn man das Analyseprogramm später startet.
Suchender schrieb: > Das das datenliefernde Programm schon alleine laufen lassen nur durch > den Ringbuffer gehen die Daten dann eben schnell verloren. macht nur wenig sinn. Denn die Daten sind dann eh weg Aber wenn es eh ein Datenstrom ist, dann würde ich Pipes nehmen. Dann kann man das zur not auch auf 2 PC laufen lassen.
Dir Frage ist auch ob es wirklich 100MB/s sein müssen. Wenn das 2. Programm eh erst mal den Mittelwert berechnet bevor es die Datenweiterverarbeitet, dann mönnte auch das 1. Programm erst mal die datenreduzierenden Dinge erledigen. Wär nicht die erste Frage hier wie man 100MB/s vom ADC übertragen kann und danach stellt sich heraus, daß die Daten als erstes nach dem Übertragen auf 1/100 durch Mittelwertbildung eingedampft werden.
Es sind tatsächliche 100MB/s. Aber das Stichwort Pipes scheint die Lösung zu sein. Ich habe dann diesen Artikel gefunden http://www.drdobbs.com/windows/using-named-pipes-to-connect-a-gui-to-a/231903148 der mir weiter geholfen hat. thx
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.