[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