Forum: PC Hard- und Software Shared Memory


von Suchender (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Suchender (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Suchender (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

von Suchender (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.