Multi Threading

Hallo,

Ist es möglich in PHP mehrere Befehle gleichzeitig auszuführen?
Wenn man z.B. eine Suchmaschinenspider betrachtet, so ist das meiste an der Laufzeit des Scriptes Wartezeit, bis ein externer Server antwortet. Das ist wenig effektiv. Während der Wartezeit könnten andere URLs geöffnet werden.

Gut man kann parallel das gleiche Script mehrfach starten - der Server kann ja mehrere Threads gleichzeitig ausführen. Aber das ist schwer zu kontrollieren und keine wirklich schöne Lösung. Alleine die ganzen Variablen, die jedesmal von Script zu Script übergeben werden müssten (Große Arrays) verhindern diese Lösung.

Gruß Joachim

Hallo,

Ist es möglich in PHP mehrere Befehle gleichzeitig
auszuführen?

Nein, der einzige, der es jemals versucht hat (siehe unter

http://www.php.net/manual/sv/control-structures.decl… )

hat es wieder aufgegeben :wink:

Wenn man z.B. eine Suchmaschinenspider betrachtet, so ist das
meiste an der Laufzeit des Scriptes Wartezeit, bis ein
externer Server antwortet. Das ist wenig effektiv. Während der
Wartezeit könnten andere URLs geöffnet werden.

Yes Sir. Das mach man, in dem man vor dem starten der Suche z.B. eine Seite mit z.B. Javascript-Code zurückliefert, der regelmäßig eine PHP Seite mit einer Funktion aufruft, welche wiederum schaut, ob die Ergebnisse schon vorliegen. Wenn ja, wird die Ergebnisseite zurückgeliefert, wenn nein, wieder die Seite mit dem Javascript. Manche realisieren das auch über einen refresh META Tag, ist aber von der Architektur nicht ganz so sauber, weil Du die Funktionalitäten für Refresh und für Ergebnislieferung in ein und der selben Seite bündelst (also eher eine Frage für Programmierästheten, wie man sowas macht, aber es geht).

Gut man kann parallel das gleiche Script mehrfach starten -
der Server kann ja mehrere Threads gleichzeitig ausführen.
Aber das ist schwer zu kontrollieren und keine wirklich schöne
Lösung. Alleine die ganzen Variablen, die jedesmal von Script
zu Script übergeben werden müssten (Große Arrays) verhindern
diese Lösung.

Du musst auch hier (s.o) eine Art Session Management (eine einfachee INT Zähler genügt) einführen, damit nicht ein User die Ergebnisse des anderen angezeigt bekommt. (BTW: Der einfache int-Zähler ist bei Sicherheitskritischen Sachen nicht genug - schon klar, das man das faken kann - Man in the middle und so).

Hoep this helps
Michael

Hoep this helps
Michael

Hmmm… Gibt es denn eine Scriptsprache, auf die ich ausweichen kann? Oder wie realisiert man sowas sonst?

Jojo

Hope this helps
Michael

Hmmm… Gibt es denn eine Scriptsprache, auf die ich ausweichen
kann? Oder wie realisiert man sowas sonst?

Jojo

Sorry, ich hatte in Deinem ursprünglichen Posting überlesen, dass Du einen Suchmaschinenspider realisieren willst. Das grundsätzliche Problem liegt wohl in einem Missverhältnis zwischen dem, wofür diese „Scriptsprachen“ gedacht sind und dem wofür Du sie Anwenden willst.

Das was gemeinhin „Scripsprache“ genannt wird ist ja normalerweise die API (Application Programming Interface) eines Application Servers. Application Server aber sind eigentlich nur mäßig geeignet um Client-Anwendungen (und das ist ein Spider ja, er verhält sich ja gegenüber einem „fremden“ Server wie ein Client) zu konstruieren.

Ich denke, wenn ich Deine Aufgabe hätte und einerseits die Vorteile von PHP bzgl. des String-Parsing nutzen wollte (PERL kann das meiner Einschätzung nach übrigens noch performanter), andererseits aber meine Netzwerkverbindung möglichst effektiv auslasten wollte, indem ich möglichst viele fremde Seiten lade, während PHP noch analysiert, dann würde ich das in etwa wie folgt tun.

Mit Hilfe eines kleinen C/C++ Programms würde ich die zu ladenden URLS aus einer Datei lesen.

Die Antworten der Server würde ich aus C/C++ in temporären Dateien speichern, die in einer Weise einen Verweis auf die URL enthielten.

Das PHP-Script könnte nun locker über die geholten Inhalte Indexe bilden sowie die enthaltenenn Links, wieder als vollständige URLS in die URL-Datei für das C/C++ Programm schreiben etc.

In PHP könnte ggf. auch die Feststellung stattfinden, ob die jeweilige neue URL schon im Index vorhanden ist und nicht neu durchsucht werden soll etc.

Während das C/C++ Programm ggf. in mehreren Instanzen (mehrere Prozesse gleichzeitig) oder auch Threads (find ich dafür nicht so elegant) weitere Server „anspricht“ und deren Inhalte holt.

Eine weitere Möglichkeit ist z.B. auf

http://www.python.org/dev/doc/devel/lib/module-async…

für die Scripsprache python beschrieben.

„Multithreading“ in python ist in

http://starship.python.net/crew/hinsen/MMTK/Manual/M…

beschrieben.

i.O. ? Gruß Michael

1 Like

Danke!
für die ausführliche Antwort.

Java ist mutithreading-fähig!