Thread Rückmeldung von Status bei Aufruf eines Moduls mit POE (4 answers)
Opened by Juergen at 2009-06-09 08:53

sid burn
 2009-06-09 10:14
#122414 #122414
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Doch das soll so sein.

POE ist eine Eventschleife. Daher irgendwann ruft man den Kernel in POE auf und er regelt die ausführung selber. Dabei ist es wie gesagt Event betrieben. Daher wenn ein Event eintrifft wird dafür eine Subroutine/Code ausgeführt. Solange kein Event eintrifft läuft er sozusagen in seiner eigenen unendlichen Schleife.

Wenn der Code für ein Event allerdiengs unendlich dauert, weil du dort eben eine unendliche schleife hast, dann springt er niemals mehr zur Eventschleife zurück. Daher musst du soetwas vermeiden. Auch direktes I/O das Blockiert oder sachen wie sleep() musst du vermeiden. Für solche sachen stellt POE aber auch eigene Module zur Verfügung.

Bei POE musst du dadrauf achten dein Programm in mehrere kleine Teilstücke zu zerlegen die nicht lange laufen. Sonst funktioniert es nicht.

Wenn du parallele aufgaben hast kannst du Threads oder Forken nutzen. Threads sind allerdiengs in Perl keine echten Threads und sehr langsam, daher sollte man es eher vermeiden. Und Forken kannst du effektiv nur unter Unix ähnlichen Betriebssystemen nutzen.

Ansonsten macht POE aber auch nicht alles schneller sondern es erlaubt dir Dinge Parallel zu erledigen (was natürlich auch den nebeneffekt haben kann das eine aufgabe schneller erledigt ist). Wenn du dein Programm schneller machen möchtest dann musst du Profilen und schauen an welchen Stellen es happert.
Last edited: 2009-06-09 10:22:19 +0200 (CEST)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Rückmeldung von Status bei Aufruf eines Moduls mit POE