Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7324[/thread]

Shared Memory unter Windows

Leser: 2


<< >> 9 Einträge, 1 Seite
maik
 2005-10-10 19:22
#58587 #58587
User since
2005-10-10
2 Artikel
BenutzerIn
[default_avatar]
Hallo!

Für ein etwas umfangreicheres Projekt benötige ich Shared Memory, um von mehreren Prozessen aus auf den selben Datensatz zugreifen zu können. Das ganze soll dann auf Windows und Unix laufen. Dazu ein paar Fragen:

1.) Gibt es unter Windows Shared Memory? Kann ich SM von Perl aus benutzen? Mit welchem Modul? (Insoweit ich bisher rausgefunden habe wird die Frage wohl mit nein beantwortet).

2.) Gibt es ein Perl-Modul, das Shared-Memory emuliert. Zum Bsp. unter Benutzung von Dateien als Speicher? (Auch hier hab ich bisher nichts gefunden)

3.) Wenn 1. und 2. mit nein beantwortet wird, habe ich vor selbst eine Emulation zu schreiben. Und zwar unter Verwendung von Dateien als Speicher. Mir ist klar, das das performance-mäßig extrem schlecht ist, aber es geht bei mir in erster Linie nicht um Performance (wenn jemand ne idee hat, wie mans anders machen könnte, bin ich natürlich immer offen). Das ganze würde ich dann über ge-tie-te Variablen realisieren (im wesentlichen soll es die gleiche Schnittstelle wie IPC::Shareable haben). Jedes mal wenn man eine Variable liest oder schreibt muß sie erneut aus der datei gelesen bzw. die datei neu schreiben. Um komplexere Sachen zu erlauben will ich das ganze dann immer mit Storable speichern. Mein Problem jetzt. Wenn jemand ne Referenz auf ein Objekt hat was irgendwo in dieser gespeicherten Datenstruktur hängt. Wenn ich nun diese Referenz lesen will, müßte ich ja (außer wenn ich gelockt habe) die ganze Datenstruktur neu lesen und die Referenz stimmt nicht mehr mit der Speicherstelle überein, wo nun das neu eingelesene steht. Ich hoffe mein Problem ist soweit erstmal klar geworden. Was ich also bräuchte ist eine adressierung der einzelnen elemente in einer datenstruktur, die nicht auf der adressierung im speicher aufbaut. Wenn ich das nicht hinkriege könnte ich ja immer wieder nur über die "wurzel" eine datenstruktur mich wieder durcharbeiten.
Habt ihr eine Idee, wie ich dieses Problem lösen kann (vorrausgesetzt ich hab mein problem überhaupt halbwegs rüberbringen können).

So, jetzt bin ich fertig mit meinem ersten Beitrag...

Vielen Dank und Grüße
Maik
Strat
 2005-10-10 19:58
#58588 #58588
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Module zu shared memory unter windows: hast du schon mal auf search.cpan.org nach Win32 gesucht? da muesste es doch schon was geben...

du meinst "serialisierung von daten"? dafuer wuerde ich Storable oder ev. auch Data::Dump(?:er)? verwenden... ab in eine datei oder so und wiederherstellen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
nepos
 2005-10-10 21:26
#58589 #58589
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Fuer shared memory unter Linux/Unix koenntest du dir mal die IPC-Module bei CPAN angucken.
Insbesondere CPAN:IPC::Shareable
ptk
 2005-10-10 21:44
#58590 #58590
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Vielleicht reicht es, wenn du DB_File bzw. DB_File::Lock verwendest. Das wird zwar in eine Datei geschrieben, aber ist vielleicht dennoch effizient genug (moderne Betriebssysteme haben eine gute VM-Implementation, die so viel wie möglich im RAM macht).
murphy
 2005-10-10 22:33
#58591 #58591
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Falls es unter Win32 tatsächlich keinen Shared Memory gibt, könnte man zumindest Memory Mapped Files verwenden. Das sollte eigentlich das nächst Effizienteste sein.
When C++ is your hammer, every problem looks like your thumb.
sri
 2005-10-10 22:58
#58592 #58592
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=murphy,10.10.2005, 20:33]Falls es unter Win32 tatsächlich keinen Shared Memory gibt, könnte man zumindest Memory Mapped Files verwenden. Das sollte eigentlich das nächst Effizienteste sein.[/quote]
Welches Mmap Modul funktioniert denn unter Windows und Unix?

Meiner erfahrung nach kann man Platform unabhaengig eigendlich nur Sachen wie Cache::FileCache benutzen.
maik
 2005-10-10 23:02
#58593 #58593
User since
2005-10-10
2 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich hab da was gefunden, was ungefähr das ist, was ich programmieren wollte: Win32::MMF::Shareable.

Das Modul Cache::FileCache werd ich mir auch nochmal anschauen.

Vielen Dank soweit für eure Antworten.
Maik
sesth
 2005-10-11 12:44
#58594 #58594
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Nur der Vollständigkeit halber: Ein COM-Server (OLE-Automation) als Singleton sollte es auch tun und ist auch performant.
Gruß
Thomas
murphy
 2005-10-11 14:20
#58595 #58595
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=sri,10.10.2005, 20:58][...]
Welches Mmap Modul funktioniert denn unter Windows und Unix?
[...][/quote]
Leider kenne ich kein Perl Modul, das das unter Windows und *nix gleichermaßen zur Verfügung stellt.

Unter C würde ich dir jetzt die Apache Portable Runtime Library empfehlen...
When C++ is your hammer, every problem looks like your thumb.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-10-10 19:22.