Wie kann man die Verwendung von multi-threading in PHP-Anwendungen
Ist es eine realistische Möglichkeit der Umsetzung einer multi-threaded-Modell in PHP, ob wirklich, oder auch nur zu simulieren. Einige Zeit zurück, es wurde vorgeschlagen, dass Sie zwingen könnte, das Betriebssystem zu laden, eine andere Instanz des PHP-Programms und mit anderen gleichzeitig Laufenden Prozesse.
Das problem mit diesem ist, dass wenn der PHP code beendet die Ausführung des PHP-Instanz im Speicher bleibt, da es keine Möglichkeit gibt, es zu töten aus in PHP. Wenn Sie also die Simulation von mehreren threads können Sie sich vorstellen, was passieren wird. Also ich bin noch auf der Suche nach einem Weg, multi-threading kann getan werden, oder simuliert werden effektiv von PHP. Irgendwelche Ideen?
- Siehe meine Frage und die Antworten hier: stackoverflow.com/questions/2101640/...
- ...und mir hier: stackoverflow.com/questions/209774/does-php-have-threading/...
- wie zu verwenden pthreads-extension: phplobby.com/php-multi-thread-on-windows-pthreads-configuration
- Vielleicht von Interesse: pthreads.org
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multi-threading möglich ist in php
Ja, Sie können tun, multi-threading in PHP mit pthreads
Vom die PHP-Dokumentation:
Einfachen Test
Ersten Lauf
Zweiten Lauf
Realen Welt Beispiel
Multi-threading is possible in php
.PHP 7.2.4 (cli) ( ZTS MSVC15 (Visual C++ 2017) x64 )
ich sehe geradestart
und nicht echofinish
warum?!warum nutzen Sie nicht popen?
Threading ist nicht im Lager verfügbar PHP, aber die Programmierung ist möglich durch die Verwendung von HTTP-Anforderungen als asynchrone Aufrufe.
Mit den curl-timeout-Einstellung auf 1 gesetzt und das gleiche session_id für die Prozesse, die Sie wollen, verbunden zu sein mit einander, können Sie die Kommunikation mit session-Variablen, wie in meinem Beispiel unten. Mit dieser Methode können Sie auch den browser schließen und die Auger-Prozess immer noch auf dem server vorhanden ist.
Vergessen Sie nicht, überprüfen Sie die korrekte session-ID, wie diese:
startprocess.php
process1.php
verifysession.php
closeprocess.php
set_time_limit(0);
Huch! Nie, niemals tun.Du kannst zwar nicht thread, Sie haben einige Grad der Prozess-Steuerung in php. Die Funktion zwei Sätze, die hier nützlich sind:
Process control-Funktionen
http://www.php.net/manual/en/ref.pcntl.php
POSIX-Funktionen
http://www.php.net/manual/en/ref.posix.php
Könnten Sie Ihre Gabel Prozess mit pcntl_fork - durch Rücksendung der PID des Kindes. Dann können Sie mit posix_kill zu despose der PID.
Sagte, dass, wenn Sie töten ein Elternprozess ein signal gesendet werden sollte, um den Kind-Prozess sagt er zu sterben. Wenn php selbst ist nicht dies zu erkennen könnte man registriert eine Funktion, um es zu verwalten und ein sauberes beenden mit pcntl_signal.
Verwendung von threads ist möglich durch die pthreads-PECL-Erweiterung
http://www.php.net/manual/en/book.pthreads.php
Ich weiß, das ist eine alte Frage, aber für Menschen auf der Suche, es gibt eine PECL-extension in C geschrieben ist, gibt PHP multi-threading-Fähigkeit nun, es liegt hier https://github.com/krakjoe/pthreads
Können Sie mit exec() zum ausführen eines Kommandozeilen-Skript (wie z.B. Kommandozeilen-php) und falls du leiten Sie die Ausgabe in eine Datei dann ist dein script nicht wartet, bis der Befehl fertig stellen.
Kann ich nicht ganz vergessen, die php-CLI-syntax, aber Sie wollen würde, so etwas wie:
Denke ich durchaus ein paar shared-hosting-Server haben, exec() standardmäßig deaktiviert aus Sicherheitsgründen, aber vielleicht einen Versuch Wert.
Könnte man simulieren threading. PHP kann im hintergrund laufen Prozesse über popen (oder auch proc_open). Diese Prozesse können kommuniziert werden über stdin und stdout. Selbstverständlich können diese Prozesse kann sich ein php-Programm. Das ist wahrscheinlich so nah wie Sie erhalten.
Wie etwa pcntl_fork?
überprüfen Sie bitte die manual-Seite für Beispiele: PHP pcntl_fork
Je nachdem, was Sie versuchen zu tun, Sie könnten auch curl_multi, es zu erreichen.
Ich weiß, das ist alt, aber man konnte sich bei http://phpthreadlib.sourceforge.net/
Es unterstützt die bidirektionale inter-thread-Kommunikation und hat auch eingebaute Schutzmechanismen, die für das töten von Kind threads (Vermeidung von Waisen).
Den Thread-Klasse ist seit PECL pthreads ≥ 2.0.0.
Können Sie haben die Möglichkeit:
pcntl_fork
funktioniert nicht in einer web-server-Umgebung, wenn es abgesicherten Modus eingeschaltet. In diesem Fall, es funktioniert nur in der CLI-version von PHP.Als das schreiben meiner aktuellen Kommentar, ich weiß nicht über die PHP-threads. Ich kam, um sich für die Antwort, mich hier, aber ein workaround ist, dass das PHP-Programm, das erhält die Anfrage vom web-server delegiert die ganze Antwort-Formulierung, um eine Konsole-Anwendung, die speichert seine Ausgabe, die Antwort auf die Anfrage, um eine Binär-Datei und das PHP-Programm, dass gestartet die Konsole-Anwendung gibt, die Binär-Datei byteweise als Antwort auf die empfangene Anfrage. Die Konsole-Anwendung kann in einer beliebigen Programmiersprache geschrieben, die auf dem server ausgeführt wird, einschließlich derjenigen, die richtigen threading-Unterstützung, einschließlich der C++ - Programmen, die mit OpenMP.
Einer unzuverlässigen, schmutzigen trick ist die Verwendung von PHP für die Ausführung einer Konsolenanwendung, "uname",
ausdrucken und die Ausgabe der console-Befehl, um die HTML-Ausgabe, um herauszufinden, die genaue version der server-software. Installieren Sie dann die exakt gleiche version der software, um eine VirtualBox-Instanz, zu kompilieren/assemblieren, was vollständig in sich geschlossene, vorzugsweise statische, die Programme, die man will und dann laden diese auf den server. Von diesem Zeitpunkt an die PHP-Anwendung verwenden können, die Binärdateien, die in der Rolle der Konsole-Anwendung, die richtige multi-threading. Es ist ein schmutzig, unzuverlässig, Abhilfe für die situation, wenn der server-administrator hat die nicht installiert alle benötigten Programmier-Sprache-Implementierungen auf der server. Die Sache zu beachten ist, dass bei jeder Anfrage, dass die PHP-Anwendung erhält der console-Anwendung(en) beendet/beenden/get_killed.
Als zu dem, was die hosting-service-Administratoren meinen, dass solche server Nutzungsmuster, ich denke, es läuft darauf hinaus, Kultur. Im nördlichen Europa wird der service-Anbieter HAT ZU LIEFERN, WAS ANGEKÜNDIGT WURDE und wenn die Ausführung der Befehle in console war erlaubt und das hochladen von nicht-malware-Dateien erlaubt war, und der service provider hat das Recht zu töten, die server-Prozess nach wenigen Minuten oder erst nach 30 Sekunden, dann die hosting-service-Administratoren fehlen die Argumente für die Bildung einer richtigen Beschwerde. In den Vereinigten Staaten und Westeuropa die situation/Kultur ist sehr anders und ich glaube, dass es eine große chance gibt, dass in den USA und/oder Westeuropa hosting-service-provider
weigern, zu dienen, hosting-service-clients, die mit den oben beschriebenen trick. Das ist nur meine Vermutung, da meine persönlichen Erfahrungen mit US-hosting-services und angesichts dessen, was ich von anderen gehört über die westliche Europäische hosting-services. Mit dem schreiben meines aktuellen Kommentar(2018_09_01) ich weiß nicht, etwas über die kulturellen Normen der Süd-europäischen hosting-service-Provider, Süd-Europäische Netzwerk-Administratoren.
Kann sein das ich etwas verpasst, aber exec hat nicht funktioniert, als "asynchron" ist für mich in der windows-Umgebung, die ich verwendet Folgendes in windows und es klappte 😉
Multithreading bedeutet, die Ausführung verschiedener Aufgaben oder Prozesse gleichzeitig, wir können dies erreichen, in php mit dem folgenden code,obwohl es keinen direkten Weg zu erreichen multithreading in php aber wir können erreichen fast die gleichen Ergebnisse, indem Sie folgenden Weg.
}
Test_1.php
Diese ausgeführt wird test_1.php zwei mal gleichzeitig und beide Prozess wird im hintergrund ausgeführt, die gleichzeitig ,also in diese Weise können Sie erreichen multithreading in php.
Dieser Kerl getan wirklich gute Arbeit Multithreading in php