Boss/Worker Pattern in Perl?

Boss/Worker Pattern in Perl?

am 23.02.2007 20:28:10 von Z1Sg2MaJ

Ich versuche gerade sowas ähnliches wie das Boss/Worker Pattern in Perl
ohne Threads umzusetzen. (Mein Perl bietet weder keinerlei Threads an:
usethreads=undef use5005threads=undef useithreads=undef)

Ich möchte wegen des Installation- und Pflegeaufwandes kein zweites Perl
installieren und ein Update kommt auch nicht in Frage, weil es ein
Produktivsystem ist. Außerdem würde ich gerne wissen, ob das Problem
überhaupt mit klassischer Fork-Technologie lösbar ist.

Zu Erklärung: Ich habe einen Task, der Anfragen aus dem Netz entgegen
nimmt und diese speichert. Im Hintergrund soll ein Task laufen, der
diese abgespeicherten Anfragen sequentiell abarbeitet.

Der im Vordergrund laufende Task kann sich ruhig forken (um mehrere
Anfragen entgegen nehmen zu können), das macht das Problem von der
Struktur her nicht einfacher oder schwieriger

Boss-Task: Nimm eine Anfrage entgegen und speicher diese in einer FIFO
Queue. Wenn kein Worker am laufen ist, starte einen.

Worker-Task: Schaue nach, ob in der FIFO-Queue was drin ist. Wenn ja,
arbeite das ab und beginne wieder von vorne. Ist die Queue leer beende
dich einfach.

Meine Gedanken dazu: Wenn ich die FIFO über eine named Pipe baue, kann
der Boss-Task theoretisch blockieren, wenn viele Anfragen reinkommen und
in die FIFO-Queue geschrieben werden und diese vollläuft.

Außerdem soll der Worker während seiner Arbeit nicht ständig auf
irgendwas lauschen, sondern einfach nur seine Arbeit arbeiten. B-)

Meine speziellen Punkte/Fragen sind also:
- Wie kann ich eine FIFO unter Perl realisieren?
- Wie kann ich einem geforktem Programmteil Nachrichten asynchron
zukommen lassen?
- Kann dieses Pattern (ohne Threads) überhaupt in Perl gelöst werden?

Ich nehme auch gerne andere Ansätze entgegen, z.B: dass der Boss die
Arbeiten in ein Filesystem schiebt, wo der Worker mit Hilfe von
Filesystem-Events (z.B: SGI::FAM) auf Neuankömmlinge wartet und dann
anfängt zu arbeiten.

Hinweise? Kommentare? URLs zu diesem Thema?

--
So long... Fuzz

Re: Boss/Worker Pattern in Perl?

am 24.02.2007 09:05:25 von Frank Seitz

Erik Wasser wrote:

> Meine speziellen Punkte/Fragen sind also:
> - Wie kann ich eine FIFO unter Perl realisieren?
> - Wie kann ich einem geforktem Programmteil Nachrichten asynchron
> zukommen lassen?
> - Kann dieses Pattern (ohne Threads) überhaupt in Perl gelöst werden?

Klar kann das mit Perl gelöst werden. Da Du mit Prozessen arbeitest,
spielt sich die Lösung aber mehr im Bereich der Systemprogrammierung ab,
insbesondere den Interprozesskommunikationsmöglichkeiten Deines OS.

Lesetipp (aber keinesfalls erschöpfend): perldoc perlipc

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel