Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich Multithreading in PHP?

Wie verwende ich Multithreading in PHP?

WBOY
WBOYOriginal
2016-12-01 00:01:161092Durchsuche

Geschäftsszenario: Daten über die API-Schnittstelle abrufen und in die Datenbank einfügen. Ich möchte die Multithreading-Technologie verwenden, um sie umzuwandeln, weiß aber nicht, wie ich anfangen soll. Andere Wege funktionieren auch.

Ein zusätzlicher Satz: Die zukünftige Richtung von PHP ist unklar. Java verfügt über viele wichtige Dinge wie Hadoop, Spark, Storm usw. Wohin wird sich PHP von hier aus entwickeln?

Antwortinhalt:

Tatsächlich müssen Sie hier lediglich eine Möglichkeit finden, im Web eine „asynchrone“ Aufgabe auszuführen, die mehrere Stunden dauert. Was PHP betrifft, gibt es zwei Möglichkeiten, dies zu tun:
(1) Verwenden Sie die Funktion „shell_exec“ in PHP, um eine unabhängige PHP-Skriptausführung in der Shell zu starten. Diese Methode entspricht tatsächlich dem Einrichten eines separaten Shell-Prozesses, der Ihre Aufgaben während der Verarbeitung des Webservers erledigt. Hier muss besonderes Augenmerk auf die Serversicherheit von Shell_exec gelegt werden. Achten Sie auf die Überprüfung der Parameter und achten Sie darauf, dass Sie nicht in den Shell-Befehl übernommen werden. Dies lässt sich relativ einfach umsetzen.
(2) Verwenden Sie PHP, um einen Server zu implementieren, einen Port abzuhören und Dienste für die Webseite bereitzustellen. Hier gibt es viele Implementierungsmethoden, normalerweise mit Erweiterungen wie nativem Pthread (Multithreading), Open-Source-Erweiterung Swoole usw.

Es ist unangemessen, Multithreading direkt in Webprogrammen zu verwenden. Das Standard-Timeout beträgt beispielsweise 30 Sekunden. Wie stellen Sie sicher, dass der übergeordnete Prozess noch funktioniert, bevor die Thread-Aufgabe abgeschlossen ist? swoole Okay, Swoole: PHPs asynchrone, parallele, verteilte Erweiterung , löst Ihr Problem Sie können den Befehlszeilenmodus von PHP zum Ausführen verwenden, dies ist jedoch kein Multithreading, sondern ein Multiprozess.
Für einen komplexeren Weg können Sie Gearman verwenden. Mehrere Prozesse können den gleichen Effekt erzielen. PHP selbst unterstützt kein Multithreading, aber einige Erweiterungen können Ihnen dabei helfen Lassen Sie mich meine Meinung teilen.
Dieses Szenario muss nicht unbedingt mit Multithreading gelöst werden. Die Verwendung mehrerer Prozesse ist stabiler.
Dann im Geschäftsszenario. In die Datenbank einfügen. Um was für eine Datenbank handelt es sich? Liegt es nicht an der Schreibsperre?
PHP kann Prozesse, Threads, asynchrone Prozesse usw. verwenden. Es gibt viele von Experten geschriebene Erweiterungen, die Ihnen dabei helfen können. Was die Leistung in Geschäftsszenarien betrifft, müssen Sie diese selbst testen.
Was PHP betrifft, können Sie mehr darüber erfahren, was andere unter schnell und langsam verstehen und welche Verbesserungen in 7 vorgenommen wurden. Gleichzeitig ist PHP hauptsächlich ein Webentwicklungsskript. Sie müssen die Bedeutung des Vergleichs verstehen.
Außerdem sprechen große Kühe im Allgemeinen nicht nur eine Sprache. Oder es bedeutet, sich nicht an eine Sprache zu halten.
Alles in allem interessant.
Ich hoffe, ihr könnt die schlechten Punkte aufzeigen.
--------------------------
Nachdem ich das Neueste gelesen habe Antwort, füge einen Satz hinzu. Tatsächlich möchte ich auch sagen, dass die „asynchrone“ Lösung in Ordnung sein wird. 2333 Sie können die Erweiterung php_pthreads für Multithreading verwenden. Der Nachteil besteht darin, dass PHP im Thread-sicheren Modus ausgeführt werden muss. Für einfache asynchrone Anwendungen können Sie popen(), fsockopen(), cURL in Betracht ziehen. Für komplexere Anwendungen können Sie die Erweiterung „Message Queue“ in Betracht ziehen > Außerdem gibt es Swoole! Suchen Sie zunächst den Engpass des Programms, bei dem es sich um MySQL handeln muss. Ob Parallelität dieses Problem lösen kann, hängt von Ihrer spezifischen Speicherstruktur ab.
Lösung:
1. Schreiben Sie MySQL in Stapeln, was viel schneller ist als das parallele Schreiben
2. Verwenden Sie das PHP-Multiprozess-Framework GitHub – huyanping/simple-fork-php: einfacher Multiprozess-Manager basierend auf pcntl

Bietet eine Schnittstelle wie ein Java-Thread
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn