Hallo Andreas,
Unix-Linux-Systemprogrammierung (Herold, ADW-Verlag) Advanced Programming In The Unix(TM) Environment (Stevens, ADW-Verlag, Professional Computing Series) Gibts da nichts online? Ist das Thema denn soooo komplex?
Ersteres habe ich auch, das hat 1147 Seiten. ;-)
Also kann man dann auch innerhalb eines Prozesses mehrere Threads starten?
Ja. Du musst aber im Prozess einen eigenen Scheduler haben. Bei normalen Prozessen sieht das so aus:
+--------------------------------------------------------------------------+ | Kern | | +--------------------------------------------------------+ | | | Scheduler | | | +--------------------------------------------------------+ | | ^ ^ ^ | | | | | | +--------------------------------------------------------------------------+ | | | v v v +-------------+ +-------------+ +-------------+ | Prozess | | Prozess | | Prozess | +-------------+ +-------------+ +-------------+
Wenn Du Threas innerhalb eines Pozesses haben willst, dann brauchst Du innerhalb des Prozesses einen eigenen Scheduler:
+--------------------------------------------------------------------------+ | Kern | | +--------------------------------------------------------+ | | | Scheduler | | | +--------------------------------------------------------+ | | ^ ^ ^ | | | | | | +--------------------------------------------------------------------------+ | | | v v | +-------------+ +-------------+ +--------------------------------------+ | Prozess | | Prozess | | | Prozess | +-------------+ +-------------+ | v | | +--------------+ +---------+ | | | Scheduler | <--> | Thread | | | +--------------+ +---------+ | | ^ ^ | | | `---- | | v \ | | +-----------+ | | | | Thread | v | | +-----------+ +------------+ | | | Thread | | | +------------+ | | | +--------------------------------------+
In der IX 12/2002 auf Seite 110 wird eine neue Thread-Biblithek für Linux vorgestellt, die das o.g. kann. Diese ist aber noch "experimentell".
Bezogen auf mein Beispiel unten, könnte ich anstatt neue Prozesse zu starten genauso neue Threads innerhalb des einen Prozesses starten, mit selbigem Ergebnis, also dass die HTTP-Requests parallel versendet werden, bei niedrigerer Hardware-Auslastung?
Theoretisch: ja.
Geht das überhaupt bzw. geht das mit PHP?
Mit PHP: Da müsstest Du schon eine eigene Erweiterung schreiben. Denn PHP selbst kann so etwas nicht. PHP kennt AFAIK nicht mal die Linuxthreads-Implementierung, sondern nur die "normalen" Prozessfunktionen. (ich kann mich aber auch täuschen)
Heißt das man sollte das bei Linux doch lieber lassen?
Wie gesagt, PHP kennt sowieso nur Pozessfunktionen, aber keine Threads, und dann macht es keinen Unterschied.
Ja, aber das ändert ja erstmal nicht daran das die CPU damit auch nicht schneller wird. Wird da also irgendwo was gespart.
Nein, aber eine CPU unterstützt das Betriebsystem im Multitasking. Während eine Aktion läuft, kann umgeschaltet werden, so dass diese Aktion unterbrochen wird, bis dieser Prozess wieder drankommt.
Ich kenne mich da jetzt wirklich nicht aus, nur, wenn ich jetzt PHP verwende, also ich erstelle 10 Kinderprozesse, greifen diese Prozesse dann alle über die gegebenen Schnittstellen direkt auf OS-Funkionene zu, z.B. um einen HTTP-Request abzusenden? ich hatte jetzt gedacht das da der PHP Interpreter oder sowas noc dazwischen hängt, aber das Script ist ja, wenn es bereits ausgeführt wird schon interpretiert, oder?
Natürlich hängt PHP dazwischen, aber jedes Mal eine andere PHP-Instanz, weil das alles andere Prozesse sind.
Wenn ich in einem Script in einer schleife fsockopen, fputs("GET..."), fclose verwende, läuft die Schleife erst weiter, wenn die Antwort vom Server gekommen ist, wenn ich das auf mehrere Prozesse verteile, können alle (fast) gleichzeitig anfangen, ohne auf andere Prozesse Rücksicht nehmen zu müssen.
Genau.
Grüße,
Christian
Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst. -- Albert Einstein