[Vienna-pm] Fragen zu Threads

Schröttner Robert rs at ednet.at
Sat Apr 2 04:20:45 PST 2005


Hallo !

peter pilsl schrieb:

> 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.
> ...

Sorry, ich hab den Thread nicht im detail verfolgt, aber... Werden da 
gerade Äpfel und Birnen zu Mus verarbeitet?

 'copy-on-write' und 'forked' hat doch nichts mit Threads zu tun. Mach 
ich ein fork, bekommt jeder sub_PROZESS_ eine Kopie des Datensegments 
vom Master - daher wirken sich auch Änderungen in den Daten nur im 
jeweiligen Prozess aus - daher muß mir der Kernel unter die Arme greifen 
(zb. IPC...) damit ich Daten austauschen kann.

Bei _THREADS_ gibt's kein copy. Dh. alle threads Arbeiten am _gleichen_ 
datensegment. Daher muss sich die Applikation, bzw. perl selbst 
irgendwie helfen, dass nicht der eine Thread was wo reinschreibt, 
waerend ein anderer Thread zb.grade ausliest. (also ein Locking auf 
Applikationsebene)

Zumindest war das die ursprüngliche definition von Threads vs. 
Prozessen. - aber vielleicht bin ich da ja nicht mehr am laufenden.
Ich wollte mich vor längerer Zeit schon mal mit Perl-Threads 
auseinandersetzen, hab es letztendlich dann mit Prozessen gelöst (und 
später dann in C++)
  

> 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" ;)

Bekomm unter mod_perl jetzt Threads, oder Prozesse - oder hängt das ev. 
sogar davon ab welchen apache ich jetzt fahr? (http.worker oder der andere?)

lg Schröttner Robert

*- Schroettner Robert, IT-Services                                 -*
|  Eurodata Datenverarbeitungsdienst Ges.m.b.H.                     |
|  Schafflerhofstraße 1, 1220 Wien          __   _                  |
|  Tel:  +43 (1) 7747076 - 51              / /  (_)__  __ ____  __  |
|        +43 (664) 4345798                / /__/ / _ \/ // /\ \/ /  |
|  Fax:  +43 (1) 7747076 - 12            /____/_/_//_/\_,_/ /_/\_\  |
|  WWW:  http://www.ednet.at                    TUX for President   |
*-     *EURODATA - WIEN - PRAG - BRUENN - BUDAPEST - BUCAREST*     -*



More information about the Vienna-pm mailing list