Heim >Backend-Entwicklung >PHP-Tutorial >PHP unterstützt kein Multithreading, es besteht also keine Notwendigkeit, Probleme mit der Parallelität zu berücksichtigen? Dieser Satz, oder?
Können Sie, wie bereits erwähnt, einen detaillierten Grund nennen?
Können Sie, wie bereits erwähnt, einen detaillierten Grund nennen?
Der größte Teil der Parallelität, über die wir normalerweise sprechen, betrifft Dienste wie Apache Nginx
anstelle von PHP.
Außerdem ist PHP multithreaded, wird aber nicht in täglichen Projekten verwendet.
Multithread-Klasse definieren, die den Thread erweitert
Tatsächlich ist dieser Satz selbst mehrdeutig.
Schauen Sie sich zunächst die Voraussetzungen an:
<code>php不支持多线程 </code>
Dem PHP-Sprachcode selbst ist es (in den meisten Fällen) egal, ob er Multiprozess oder Multithreading ist. Dies bedeutet jedoch nicht, dass PHP kein Multi-Threading/Multi-Processing unterstützt. PHP-FPM ist Multiprozess- und Single-Thread-Modus, und der Multi-Thread-Modus von Apeche ist Multi-Thread. PHP steuert Prozesse oder Threads im Allgemeinen nicht direkt auf der PHP-Codeebene.
<code>不用考虑并发问题 </code>
Wenn die Prämisse nicht begründet ist, besteht für die Schlussfolgerung kein Kausalzusammenhang.
Ich verstehe die ursprüngliche Absicht der Person, die dies gesagt hat: Da PHP die Steuerung von Prozessen und Threads im Allgemeinen nicht unterstützt, wird es Prozesse und Threads nicht direkt durch Code steuern, um Parallelitätsprobleme zu lösen.
Es ist nichts Falsches daran, das zu sagen.
Parallelitätsprobleme existieren jedoch immer noch nicht, nur weil der PHP-Code selbst die Lösung von Parallelitätsproblemen nicht unterstützt.
Der herkömmliche Weg, PHP-Parallelitätsprobleme zu lösen, besteht in verschiedenen Konfigurationsanpassungen (nginx.conf, php-fpm.ini, php.ini) und anschließendem Lastausgleich. Dabei handelt es sich nicht um PHP-Codes, sondern um Dinge, die eng mit PHP verwandt sind und die Sie als PHPer beherrschen müssen.
Darüber hinaus kann die PHP-Logik für bestimmte Geschäftstypen geändert werden, und sogar Front-End-Aufruflogik ist verfügbar. Es gibt auch Erweiterungen wie Swoole, die vollständig auf PHP-FPM verzichten und grundsätzlich asynchrone Parallelität in PHP unterstützen (jedoch immer noch Single-Threaded). Diese Methoden zur Parallelitätsoptimierung müssen basierend auf bestimmten Unternehmen ausgewählt werden.
Falsch, du liegst falsch!
PHP unterstützt kein Multithreading, aber der Hintergrundbetrieb des Befehlszeilenprogramms oder des PHP-FPM der Webanwendung kann gleichzeitig von mehreren Prozessen verarbeitet werden, sodass Probleme mit der Parallelität beispielsweise nicht vermieden werden können ein Inventar und zwei Wie stellen Sie sicher, dass Bestellungen nicht überverkauft werden, wenn mehrere gleichzeitige Anfragen gleichzeitig eingehen?
Auch wenn Multithreading nicht berücksichtigt wird, besteht immer noch Parallelität, die schwieriger zu lösen ist. Wir müssen immer noch Wege finden, sie zu vermeiden und zu optimieren
Gibt es Parallelität nur mit mehreren Threads? Das ist zu eng
PHP unterstützt von Natur aus Multithreading, daher gibt es einen Unterschied zwischen Thread-Sicherheit und Nicht-Thread-Sicherheit.
Informationen zur PHP-Multithread-Erweiterung finden Sie unter:
https://pecl.php.net/. package/pthreads
Diese Erweiterung bietet echte PHP-Multithread-Programmierunterstützung, die im Allgemeinen für die Skriptprogrammierung unter CLI verwendet wird.
Darüber hinaus hat Foreigner Feng auch eine asynchrone Multithread-Architektur entwickelt, um die Hochleistungsentwicklung mit der PHP-Erweiterung zu unterstützen des Echtzeit-Netzwerkdienstes Swoole:
https://pecl.php.net/package/swoole
Multi-Threading in Swoole erfordert nicht, dass sich Programmierer darum kümmern, es ist eher wie eine Reihe von Architekturen, nur Sie Muss konfiguriert werden, Swoole wird im Allgemeinen für die Skriptprogrammierung unter CLI verwendet.
Zum Beispiel verwendet der PHP-FastCGI-Dienst PHP-FPM, der häufig mit Nginx verwendet wird, mehrere Prozesse, um eine Multi-Core-Reaktion auf Parallelität zu implementieren, ähnlich wie Apache, der Prefork-MPM verwendet, unterstützt Prozesspooleinstellungen und unterstützt Statik und dynamische Prozessnummerneinstellungen, unterstützt einen natürlichen transparenten „Datenbankverbindungspool“ (persistente Verbindung):
MOD_PHP funktioniert auch in einem Multithread-Zustand, wenn es mit Apache unter Verwendung von Event-MPM ausgeführt wird, da Apache-Event-MPM ein ereignisgesteuertes Multiprozess-Multithread-MPM ist, also die threadsichere Version, die PHP verwenden muss.