Ist Asynchronität in einem einzelnen Prozess so wichtig?

醉折花枝作酒筹
Freigeben: 2023-03-11 16:32:01
nach vorne
1328 Leute haben es durchsucht

Im Allgemeinen handelt es sich bei PHP-Programmen um Einzelprozesse, und der nächste Satz wird erst ausgeführt, wenn ein Satz ausgeführt wurde. Wenn es jedoch in einem bestimmten Link hängen bleibt, gibt es keine Möglichkeit, das Programm auszuführen. Wir benötigen einen anderen Mechanismus, um dieses Problem zu lösen, und zwar asynchron.

Ist Asynchronität in einem einzelnen Prozess so wichtig?

Im Allgemeinen ist das Programm in PHP ein einzelner Prozess. Nach der Ausführung eines Satzes wird mit dem nächsten Satz fortgefahren (die pcntl_fork()-Funktionsreihe von PHP wird hier nicht verwendet. Diese Methode von mir ist viel besser Genauso wie eine Gruppe gebildeter und hungriger Menschen (die sterben könnten, wenn sie diese beiden Mahlzeiten nicht zu sich nehmen, und jeder möchte diese Mahlzeit so schnell wie möglich zu sich nehmen) Schlange steht, um Mahlzeiten zu kaufen Wenn jemand eine Mahlzeit zu sich nimmt, die nur 1 Jiao beträgt, muss er die 1 Jiao und 1 Jiao zählen, bevor er die nächste Mahlzeit zu sich nehmen kann.

Es stellt möglicherweise kein Problem dar, wenn Sie ein oder zwei Sekunden zu spät in der eigentlichen Schlange stehen, um Lebensmittel zu kaufen, aber in einem System, das schnell auf Benutzer reagieren muss, wird es problematisch, wenn dieses Phänomen auftritt, genau wie bei einer vollständigen Anmeldung Wenn der Vorgang Schritt für Schritt ausgeführt wird und in einem Schritt stecken bleibt, wird der Benutzer sehen, dass sich der Ladeknopf weiter dreht ... Zu diesem Zeitpunkt ist ein Mechanismus erforderlich dieses Problem lösen.

Lassen Sie uns zunächst etwas über die prozessübergreifende Kommunikationserweiterung sysvmsg lernen. Hierbei ist zu beachten, dass diese Erweiterung nur unter Linux/Uinux verwendet werden kann und auf anderen Plattformen ungültig ist Die Erweiterung ist sehr einfach:

yum -y install php-process
Nach dem Login kopieren

Voraussetzung ist natürlich, dass Sie PHP installiert haben. Überprüfen Sie nach der Ausführung mit dem folgenden Befehl, ob die Installation erfolgreich ist:

php -m | grep sysvmsg
#若果看到sysvmsg说明安装成功了

#或者也可以这样
php -r 'var_dump(function_exists("msg_get_queue"))';
#若果看到true说明安装成功了
Nach dem Login kopieren

Natürlich muss der obige Befehl das PHP hinzufügen Pfad zur Systemumgebungsvariablen.

Diese Erweiterung kann zwischen Prozessen kommunizieren, sehen wir uns unten ein Beispiel an.

Senden, send.php

#!/usr/bin/php
#上面的是我自己的php路径
<?php
$ip = msg_get_queue(12340);
//创建一个队列
msg_send($ip,1,"Test a message",false,false,$err);//像队列中塞一条消息
Nach dem Login kopieren

Empfangen, empfangen.php

#!/usr/bin/php
<?php
$ip = msg_get_queue(12340);
//创建消息队列,和发送的要一致,不然收不到消息
while(msg_receive($ip,0,$msgtype,512,$data,false,null,$err)){
    echo "使用内存: ".memory_get_usage()."\n";
    //这里看下使用了多少内存
    echo "收到的消息: $data\n";
    //收到的消息在这里
}
Nach dem Login kopieren

Durch Ausführen des Programms können Sie feststellen, dass das Senden und Empfangen von Nachrichten dem Standard-FIFO der Warteschlange folgt, sodass wir darauf basierend ein asynchrones System entwerfen können diese Eigenschaften.

Wie nutzt man diese Funktionen? Wenn das Programm ausgeführt wird, werden auf jeden Fall viele Vorgänge ausgeführt, während einige Vorgänge verzögert werden können und andere Vorgänge nicht wichtig sind Erster Platz. Es braucht viel Zeit.

Zum Beispiel das Aufzeichnen von Anmeldeprotokollen und das Aufzeichnen von Spieldetails. Zu diesem Zeitpunkt müssen wir nicht auf die Ausführung des Programms warten (wenn wir warten, können Probleme auftreten, und wenn solche auftreten, wird viel Zeit verschwendet zu viele unwichtige Vorgänge). Es geht darum, die zu bedienenden Dinge direkt in die Warteschlange zu werfen.

Öffnen Sie dann einen separaten Prozess im Hintergrund, um die empfangene Nachricht auszuführen, genau wie in „receive.php“. Wenn eine Nachricht vorhanden ist, wird sie ausgeführt, und wenn keine Nachricht vorhanden ist, wird sie blockiert Ist dies eine erfolgreiche Lösung? Dies löst das Problem der Zeitverschwendung, indem das Programm nicht sofort ausgeführt wird, wenn das Programm ausgeführt wird.

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonIst Asynchronität in einem einzelnen Prozess so wichtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage