[Vienna-pm] hash in shared memory?

peter pilsl pilsl at goldfisch.at
Fri May 21 09:18:16 CDT 2004


Warum shared memory?

Ich verwende shm in folgendem szenario:

beliebig viele prozesse (zB eine threaded serverapplikation wie 
apache/mod_perl) wollen gemeinsame daten sehr effizient sharen (zB 
caching aufwändiger Datenbankabfragen etc.)
Ich komme bei kaum einer mod_perl-applikation ohne aus. Irgendwo ist 
immer die Situation, dass ein Prozess Daten zeitaufwändig gewinnen muss 
und dann über shm bequem den anderen zur Verfügung stellen muss.

Wenn man es einmal gemacht hat, ist es so komplex auch wieder nicht.
semaphoren sind für ein simplex locking bestens geeignet und es muss 
einen Allocation-Table geben, damit alle Prozesse den Überblick 
behalten, was eigentlich gespeichert ist.
Wichtig natürlich immer ein monitor, der die shm-segmente wieder löscht, 
wenns nötig ist.

Sockets sind für diese Art der Anwendung nach meinem Wissen nicht geeignet.

peter


LAUN Wolfgang wrote:
> Zu den Hinweisen auf die CPAN-Module, die zum Thema SM gekommen
> sind, möchte ich eine grundlegende Frage stellen: Warum soll
> überhaupt Shared Memory verwendet werden? Damit handelt man
> sich eine ganze Reihe von Problemen ein.
> 
> (1) Shared memory segmente müssen angelegt und initialisiert
> werden. Damit muss man zwischen einem Cold start (SM
> anlegen und initialisieren) und einem Restart (z.B. nach
> Ausfall eines oder beider Programme) unterscheiden.
> 
> (2) Weiters wird Synchronisation zwischen dem Produzenten
> (dem Sammler-Prozess) und dem Konsumenten (der DB-Client)
> notwendig.
> 
> (3) Ein Hash wächst i.a. dynamisch; SM-Segmente sind dafür
> nicht unbedingt gut geeignet.
> 
> Ich habe in einer Reihe ähnlicher Fälle immer Sockets für
> die Weitergabe von Daten verwendet und bin damit recht gut
> gefahren. Neben dem Wegfallen aller Nebenbedingungen für SM
> gewinnt man gratis dazu, dass Produzent und Konsument auch
> auf verschiedenen Systemen laufen können. Speichern der
> Daten ist natürlich nur mehr im Kosument notwendig.
> 
> Ich habe für das Socket-Handling das Package Msg.pm
> aus dem Buch "Advanced Perl Programming" von Sriram
> Srinivasan verwendet. Der Code ist auf 
> http://examples.oreilly.com/advperl/
> zu finden.
> 
> (Zusatzfrage: Warum müssen es überhaupt 2 Prozesse sein?)
> 
> Für weitere Auskünfte stehe ich gerne zur Verfügung!
> 
> Wolfgang Laun
> Transport Solutions Division
> Alcatel Austria AG
> Phone +43 1 27722 5662
> Fax   +43 1 27722 1173
> 
> 
> 
> 
> 
> 
> 
> 
> 
>>-----Original Message-----
>>From: Josef Bergmann [mailto:joe at bec.at]
>>Sent: Wednesday, May 19, 2004 5:54 PM
>>To: vienna-pm at mail.pm.org
>>Subject: [Vienna-pm] hash in shared memory?
>>
>>
>>Hi!
>>
>>Ich möchte das zwei Linux-Programme auf gemeinsame Daten 
>>zugreifen. Konkret, 
>>ein Programm sammelt Informationen aus Netzwerkverbindungen 
>>und legt diese 
>>(z.Z.) in Hashes ab. Nun soll ein anderer Prozess diese Daten 
>>periodisch 
>>auslesen und in einer Datenbank ablegt.
>>
>>Die beiden Teilproblem habe ich ja gelöst, nur wie/wo lege ich die 
>>Daten/Hashes ab damit der zweite Prozess darauf zugreifen 
>>kann. Gibt es so 
>>eine Art Shared-Memory-Modul?
>>
>>bye Josef
>>-- 
>>BERGMANN engineering & consulting  http://bec.at
>>_______________________________________________
>>Vienna-pm mailing list
>>Vienna-pm at mail.pm.org
>>http://mail.pm.org/mailman/listinfo/vienna-pm
>>
> 
> _______________________________________________
> Vienna-pm mailing list
> Vienna-pm at mail.pm.org
> http://mail.pm.org/mailman/listinfo/vienna-pm
> 




More information about the Vienna-pm mailing list