[Vienna-pm] Fragen zu Threads
peter pilsl
pilsl at goldfisch.at
Sat Apr 2 03:39:20 PST 2005
Hallo,
Ich kenne threads::shared leider nicht und kann daher gar nix dazu sagen.
Da ich aber selbst ab und an threaded application programmiere, kann ich
allgemein was sagen. Vielleicht hilft dir das ja weiter.
Ich verwende für shared memory und locking hausgestrickte Lösungen, die
auf IPC basieren. Semaphoren sind für locking perfekt und für mich sind
die cpan-module für shm-segmente (zB IPC::Shareable) einfach zu langsam,
wenn ich grosse Datenmengen sharen muss (lange strings etc.)
Mit relativ wenig Aufwand lässt sich mit IPC::ShareLite und
IPC::Semaphore ein sehr schneller shared Datenspeicher realisieren, der
einen allocation-table und eine flexible Grösse hat und dessen locking
man selbst sehr gut bestimmen kann.
Ein weiteres cooles und sehr nützliches feature ist das copy-on-write
verhalten von linux. (und evtl. anderen *ixen).
Ein Master-prozess kann mempages allokieren und wenn er dann forked,
werden diese pages nicht mitkopiert, sondern geshared. Erst wenn ein
Prozess (master oder child) in diese mempage schreibt, wird sie
on-the-fly vom OS kopiert und dann die änderung geschrieben und der
Prozess hat eine eigene Kopie.
Ich verwende diese extrem nützliche Eigenschaft intensiv in mod_perl
unter apache, wo der masterthreads module lädt, welche im init jene
datenstrukturen laden, die allen subprozesse zur verfügung stehen
sollen. Der master-prozess initialisiert zB eine variable $g_ptr,
welche eine Datenstruktur von 100MB enthält und alle subprozesses
greifen readonly auf diese struktur zu, ohne auch nur ein byte
extra-speicher zu belegen, auch wenn apache 100 mal forked.
Ist halt nur read-only und um die Datenstruktur zu aktualisieren muss
man den master neu starten. Aber es ist extrem effizient und "billig",
um nicht zu sagen: "gratis" ;)
Für RW würde ich auf ein IPC::-Modul zurückgreifen, sofern du ein
posix-system hast.
und ich hoffe, dass diese meine litanei irgendwas mit deiner frage und
threads::shared zu tun hat ;)
Bei deinen Fragen würde ich aber sagen, dass du ca. die Hälfte davon
durch ausprobieren sehr leicht beantworten kannst und die andere Hälfte
(locking ohne shared) darauf hinweist, dass das modul evtl. nicht das
richtige für dich ist.
Zu den Fragen bezüglich den signal-handlers kann ich gar nix sagen. Als
ich das letzte mal darüber nachgedacht habe, was da alles schiefgehen
kann, habe ich kopfweh bekommen. Aber prinzipiell fkt. die
standardlösungen aus den Perlbüchern bei mir sehr gut, die halt das
starten/stoppen von aussen nur über den master erlauben. Macht ja auch
irgendwo sinn, denke ich.
lgp
--
mag. peter pilsl
goldfisch.at
IT-management
tel +43 699 1 3574035
fax +43 699 4 3574035
pilsl at goldfisch.at
More information about the Vienna-pm
mailing list