Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PHP5-CLI und Threads

0 views
Skip to first unread message

Jacoh Hayn

unread,
Dec 3, 2009, 1:54:39 PM12/3/09
to
Moinsen NG,

Ich bin mir fast sicher, dass PHP5 keine Threads kann, aber eben nur
fast. In der Doku hab ich nix darüber gefunden. Ich erspare Euch mal
den heißen Brei und stelle einfach meine Fragen. ;o) Nur soviel sei
gesagt; Mich interessiert hier ausschließlich das CLI.

1. Wie sieht's aus, kann PHP5 Threads?
2. Kann PHP5 etwas vergleichbares?
3. Wird PHP6 Threads können?
4. Oder bleibt mir nur die Möglichkeit das über echte Prozesse zu
machen?
5. Hat das schon mal jemand gemacht, gibt's irgendwo ein Tutorial
dazu?
6. Wir würded Ihr Threads simulieren? Mit einem Shell-Script? Mit
mehreren Cronjobs?

Liebe Grüße aus dem kalten Hamburg
Jacob

Jacoh Hayn

unread,
Dec 3, 2009, 4:43:53 PM12/3/09
to
Moinsen ich noch mal,

ein Freund hat mir eben was von PHP Threader bei phpclasses.org
gezwitschert. Den hab ich mir angesehen uns es ist im Grunde ganz
einfach. Meinen Testcode, der zumindest für mich funktioniert hab ich
mal bei http://pastebin.com/f7401e841 hinterlegt.

Wer's ausprobieren will:
* ACHTUNG die beiden say.php Prozesse müssen manuell beendet werden
* Dateien müssen ausführbar sein
* man kann die Ausgabe natürlich auch nach /dev/null umleiten
* kann man mit tail -f foobar.txt schön verfolgen

Gruß Jacob

Andreas Born

unread,
Dec 3, 2009, 5:57:20 PM12/3/09
to
Jacoh Hayn wrote:

> Ich bin mir fast sicher, dass PHP5 keine Threads kann, aber eben nur

> fast. In der Doku hab ich nix dar�ber gefunden. Ich erspare Euch mal
> den hei�en Brei und stelle einfach meine Fragen. ;o) Nur soviel sei
> gesagt; Mich interessiert hier ausschlie�lich das CLI.

> 1. Wie sieht's aus, kann PHP5 Threads?

Nein, nicht ohne zus�tzliche Module, und auch dann nicht 100%ig stabil.

> 2. Kann PHP5 etwas vergleichbares?

Ja, man kann Prozesse parallel starten, und damit indirekt auch Threads.
Aber eben keine einzelnen Threads, die im selben Prozess laufen.

> 3. Wird PHP6 Threads k�nnen?

Keine Ahnung, vermutlich eher nicht.

> 4. Oder bleibt mir nur die M�glichkeit das �ber echte Prozesse zu
> machen?

Ja.

> 5. Hat das schon mal jemand gemacht, gibt's irgendwo ein Tutorial
> dazu?

Was gemacht, Prozesse gestartet? Klar doch.
Aber Du fragtest doch nach Threads? Es ist schon ein Unterschied, ob man
einzelne Threads starten will, oder Prozesse.

> 6. Wir w�rded Ihr Threads simulieren? Mit einem Shell-Script? Mit
> mehreren Cronjobs?

Threads kann man nicht simulieren. Man kann entweder mit
worker-Prozessen arbeiten, was nat�rlich von php aus ohne gr��ere
Anstrengungen funktioniert, oder mit worker-Threads. F�r letzteres
fallen mir zwei Methoden ein:

a) Man bastelt sich eine Erweiterung, die eine Funktion zum Starten von
Worker-Threads anbietet. Die Threads werden dann im aktuellen Prozess
gestartet.
b) Man bastelt sich einen externen Wrapper (ggf. mittels einer anderen
Programmiersprache), der die Threads innerhalb seines Prozesses startet.

In beiden F�llen k�nnte man hierzu ein ISAPI-Modul von PHP verwenden,
allerdings mu� dieses Modul und alle weiteren php-module threadsicher
kompiliert werden. Auch wenn php5 selbst threadsicher sein soll, sind es
u.U. nicht alle eingebundenen Module, soda� hier eine 100%ige Stabilit�t
nicht gew�hrleistet ist. (Siehe hierzu die Thematik Apache mpm-worker
i.v.m. mod_php) Grunds�tzlich w�rde ich davon jedoch eher abraten.


Die Auslagerung von jobs in worker-Threads ist btw. eh nicht immer die
beste L�sung, da sie schlecht skaliert und dazu noch schwer
kontrollierbar ist. Eine Alternative w�re die Auslagerung und Einreihung
einzelner Jobs in eine Queue, die dann sukzessive durch ein oder mehrere
Prozesse abgearbeitet wird. Die Zahl der Worker-Prozesse kann dann auch
dynamisch angepasst werden.


Viele Gr��e,
Andreas

Sam Kang

unread,
Dec 3, 2009, 6:12:23 PM12/3/09
to
Jacoh Hayn schrieb:

> Moinsen NG,
>
> Ich bin mir fast sicher, dass PHP5 keine Threads kann, aber eben nur
> fast. In der Doku hab ich nix dar�ber gefunden. Ich erspare Euch mal
> den hei�en Brei und stelle einfach meine Fragen. ;o) Nur soviel sei
> gesagt; Mich interessiert hier ausschlie�lich das CLI.

CLI und Threads haben nicht miteinander zu tun!

> 1. Wie sieht's aus, kann PHP5 Threads?

Nein.

> 2. Kann PHP5 etwas vergleichbares?

PHP kann forken

> 3. Wird PHP6 Threads k�nnen?

Nein.

> 4. Oder bleibt mir nur die M�glichkeit das �ber echte Prozesse zu
> machen?

Nein.

> 5. Hat das schon mal jemand gemacht, gibt's irgendwo ein Tutorial
> dazu?

Ja, RTFM.
http://www.php.net/manual/de/book.pcntl.php

> 6. Wir w�rded Ihr Threads simulieren? Mit einem Shell-Script? Mit
> mehreren Cronjobs?
OK, du hast alle Vorlesungen GDI (Grundlagen der Informatik) geschw�nzt
http://de.wikipedia.org/wiki/Thread_%28Informatik%29

> Liebe Gr��e aus dem kalten Hamburg
Gr��e aus Bremen

Sam


--
Sufficiently advanced incompetence is indistinguishable from malice
(J. Porter Clark)

Sascha Tasche

unread,
Dec 5, 2009, 12:38:51 PM12/5/09
to
> OK, du hast alle Vorlesungen GDI (Grundlagen der Informatik) geschwänzthttp://de.wikipedia.org/wiki/Thread_%28Informatik%29

Oder er studiert keine Informatik...

Jacoh Hayn

unread,
Dec 6, 2009, 2:46:00 PM12/6/09
to
On 5 Dez., 18:38, Sascha Tasche <sascha.tas...@gmail.com> wrote:
> Oder er studiert keine Informatik...

Nein, ich bin Autodidakt, nicht-Abiturient und Informatikkaufmann. ;)

Aber mir war schon klar, dass ein Thread ein Teil eines Prozesses ist.
Und das Threads "billiger" sind als Prozesse ist mir auch bewusst. Mir
ging es hauptsächlich um folgendes Szenario:

Man hat ein Programm, dass man aus Usabilitygründen einmal - mit einem
Kommando - startet und in diesem Programm werden bestimmte Subroutinen
nebenläufig abgearbeitet. Was mir für ein aktuelles Projekt vorschwebt
sind zwei Subroutinen. Diese sollen parallel laufen und zudem gleich
mehrere Inszanzen / Prozesse (Thread ist natürlich der falsche
Terminus) dieser Subroutinen.

Ein Twitterfreund hat mir etwas von PHPthreader (auf phpclasses.org)
gezwitschert. Daraus habe ich folgendes, für mich ausreichende,
Vorgehen destiliert:

ecex("php5 -f /path/to/script.php > /dev/null &");

Der & am Ende bewirkt, dass der Prozess im Hintergrund ausgeführt wird
und exec() sofort returnt, also nicht auf die letzte Ausgabe wartet.
So kann man mehrere exec()s hintereinander abfeuern und hat mit einer
anständigen IPC ein Thread-ähnliches Verhalten.

Gruß Jacob

Sam Kang

unread,
Dec 6, 2009, 5:00:28 PM12/6/09
to
Jacoh Hayn schrieb:

> Ein Twitterfreund hat mir etwas von PHPthreader (auf phpclasses.org)

> gezwitschert. Daraus habe ich folgendes, f�r mich ausreichende,
> Vorgehen destiliert:

Ahhhh http://php.net/manual/de/book.pcntl.php verstehst du nicht?

> ecex("php5 -f /path/to/script.php > /dev/null &");

Ein trivialer unperformanter fork....

> Der & am Ende bewirkt, dass der Prozess im Hintergrund ausgef�hrt wird


> und exec() sofort returnt, also nicht auf die letzte Ausgabe wartet.
> So kann man mehrere exec()s hintereinander abfeuern und hat mit einer

> anst�ndigen IPC ein Thread-�hnliches Verhalten.


Threads haben damit immer noch nichts zu tun! Entweder du lernst GDI oder
Troll dich. Sorry auch als Autodidakt kann man die IT Fachterminologie lernen.
Warum willst du dagegen revoluzen? Wozu? IPCs ist wieder ein anderes Thema.
Learn the basics!

*kopfsch�ttelnd*

Markus Malkusch

unread,
Dec 6, 2009, 5:18:40 PM12/6/09
to
Jacoh Hayn:

> ecex("php5 -f /path/to/script.php > /dev/null &");
>
> Der & am Ende bewirkt, dass der Prozess im Hintergrund ausgeführt wird

^^^^^^^
[..]

> und hat mit einer anständigen IPC ein Thread-ähnliches Verhalten.

Wie Du schon sagst handelt es sich dabei um einen neuen Prozess. Das kann
PHP auch ohne dieses abenteuerliche exec Konstrukt:
<http://de.php.net/manual/de/ref.pcntl.php>

Dir geht es offenbar nur um Nebenläufigkeit, egal ob Thread oder Prozess.

Einer der Unterschiede zwischen Prozessen und Threads ist der Speicher:
Threads teilen sich den Speicher, Prozesse können erst mit IPC
kommunizieren.

PHP kann ganz sicher keine Threads. Ich kann sehr gut beobachten wie PHP den
Worker MPM zum Abkacken bringt.
--
<http://bav.malkusch.de/> - Mit PHP Kontonummern auf Gültigkeit prüfen
<http://php-autoloader.malkusch.de/> - PHP Autoload Implementierung

Torsten Zühlsdorff

unread,
Dec 7, 2009, 2:49:27 AM12/7/09
to
Sam Kang schrieb:

>> ecex("php5 -f /path/to/script.php > /dev/null &");
>
> Ein trivialer unperformanter fork....

Ohne deine jugendliche ᅵberheblichkeit zu stark zurecht stutzen zu
wollen: Da ist kein Fork. Das erzeugt lediglich einen neuen Prozess. Ein
Fork ist die *Kopie* des forkenden Prozesses mit anderer PID. Daten usw.
werden vom Elternprozess ᅵbernommen.

> Learn the basics!

Dito.

Gruᅵ,
Torsten
--
http://www.dddbl.de - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.

0 new messages