Wenn das Backend das Thinkphp-Framework verwendet und mehrere Ajaxes auf der Seite auf den Backend-Server zugreifen, wird der Backend-Server zu diesem Zeitpunkt asynchron mit einzelnen Threads oder mehreren Threads arbeiten? Ich hoffe, jemand, der mich kennt, kann es mir sagen
Wenn das Backend das Thinkphp-Framework verwendet und mehrere Ajaxes auf der Seite auf den Backend-Server zugreifen, wird der Backend-Server zu diesem Zeitpunkt asynchron mit einzelnen Threads oder mehreren Threads arbeiten? Ich hoffe, jemand, der mich kennt, kann es mir sagen
Der Standardwert ist Multiprozess und Nicht-Multithread, und ein Prozess verarbeitet eine Anfrage. PHP-Multithreading erfordert die Installation der Erweiterungsimplementierung, aber derselbe Prozess empfängt immer noch eine HTTP-Anfrage, es sei denn, Sie implementieren einen Webserver in PHP und verteilen die Anfrage dann mithilfe von Multithreading, Sie können einen Thread und eine Anfrage implementieren.
Der Standardarbeitsmodus von Apache ist Prefork. Als Modul erstellt PHP einen neuen Prozess als Reaktion auf eine Anfrage. Die maximale Anzahl von Prozessen hängt von der Apache-Konfiguration ab. Nginx kommuniziert mit PHP-FPM über Fast-CGI, was ebenfalls ein Prozess pro Anfrage ist. Die maximale Anzahl von Prozessen hängt von der PHP-FPM-Konfiguration ab.
Wenn die Backend-Verarbeitungszeit einer Anfrage zu lang ist und die Anzahl der Prozesse aufgrund mehrerer identischer Anfragen vollständig geöffnet ist, warten alle nachfolgenden Anfragen auf verfügbare Sockets
Dies hängt von Ihrem Server ab, ob es sich um einen Single-Thread- oder Multi-Thread-Server oder sogar um einen Multi-Prozess-Server handelt.
Was ich über 单线程
und 多线程
verstehe, ist Folgendes:
Wenn Sie beispielsweise ein Formular 上传文件
verwenden, handelt es sich lediglich um eine Anfrage. Sie haben lediglich eine Anfrage zum Hochladen einer Datei initiiert. Nachdem Sie Ihre Anfrage zum Hochladen einer Datei erhalten haben, hat der Server festgestellt, dass Ihre Datei sehr groß ist. dachte er. Wenn er es alleine tragen müsste, würde er wahrscheinlich nicht um 22 Uhr von der Arbeit kommen. Dann wurden automatisch (fork
) einige Helfer erstellt, was dem Erstellen einiger neuer Threads gleichkommt, die ihm beim Vervollständigen helfen Das Hochladen großer Dateien muss sehr schnell erfolgen. Das ist Multithreading
Ob es sich also um einen Single-Thread- oder Multi-Thread-Server handelt, hängt nicht davon ab, wie viele Anfragen Sie
client
并发
Sie können sich ein Szenario wie dieses vorstellen: Die Download-Geschwindigkeit des Benutzers beträgt 1 KB und er fordert dann ein 1-Millionen-Bild an. Wenn der Server Single-Threaded ist, muss er 17 Minuten warten, bis er antwortet Es ist unmöglich für dich, so zu spielen.
Der Webserver muss also multithreaded sein.
In Bezug auf die Anzahl der Threads liegt sie normalerweise bei einer einstelligen Zahl über 4. Dies ist jedoch eine Einschränkung des Browsers. Die Anzahl der von einer einzelnen Seite initiierten Anfragen ist begrenzt werden in die Warteschlange geworfen. Aus diesem Grund verweist eine Seite manchmal auf die CDN-Datei von Google, aber selbst die Webseitenbilder bleiben hängen und können nicht geladen werden.
Was mich verwirrt, ist Folgendes: Was mich verwirrt, ist, dass Apache PHP blockiert und Nginx PHP asynchron ist. Wenn es sich also um einen Apache-Server handelt, wird PHP dann daran gehindert, auf Ajax-Anfragen zu antworten?
php ist ein Single-Process-Single-Thread-Modell. Die von Ihnen erwähnte Ajax-Anfrage entspricht auch einer http-Anfrage, es gibt also kein Multithreading. Der Ajax von js wird durch asynchrone Anfrage implementiert! ! !
Die gleichzeitigen und serverseitigen Anforderungsverarbeitungsmethoden (Single-Threaded, Multi-Threaded) hängen vom Anwendungsszenario ab. In den meisten Szenarien ist die Serverseite parallel und nicht blockierend