Heim >Backend-Entwicklung >PHP-Tutorial >Beispiel für die Implementierung von PHP-Multithreading
PHP-Multithreading ist für viele PHP-Neulinge etwas unklar und weiß nicht, wofür es verwendet wird. Deshalb erklären wir Ihnen heute den Implementierungsfall von PHP-Multithreading!
Angenommen, wir führen jetzt die Datei a.php aus, aber im Programm fordere ich den WEB-Server auf, eine weitere b.php auszuführen.
Dann werden die beiden Dateien gleichzeitig ausgeführt .
(PS: Nachdem eine Link-Anfrage gesendet wurde, führt der WEB-Server sie aus, unabhängig davon, ob der Client beendet wurde)
Manchmal möchten wir keine andere Datei ausführen, aber was soll ich mit einem Teil des Codes in dieser Datei machen?
Tatsächlich werden Parameter verwendet, um zu steuern, welches Programm a.php ausgeführt wird
Sehen wir uns ein Beispiel an:
//a.php PHP代码:-------------------------------------------------------------------------------- <?php function runThread() { $fp = fsockopen('localhost', 80, $errno, $errmsg); fputs($fp, "GET /a.php?act=b\r\n\r\n"); //这里的第二个参数是HTTP协议中规定的请求头 //不明白的请看RFC中的定义 fclose($fp); } function a() { $fp = fopen('result_a.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n"); fclose($fp); } function b() { $fp = fopen('result_b.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n"); fclose($fp); } if(!isset($_GET['act'])) $_GET['act'] = 'a'; if($_GET['act'] == 'a') { runThread(); a(); } else if($_GET['act'] == 'b') b(); ?> --------------------------------------------------------------------------------
Öffnen Sie result_a.log und vergleichen Sie die Zugriffszeiten der beiden Dateien. Sie werden feststellen, dass diese beiden tatsächlich in unterschiedlichen Threads ausgeführt werden.
andere Formen verbessern
Da PHP auch Multithreading haben kann, ist das Problem ebenfalls aufgetreten Problem der Synchronisierung. Wir wissen, dass PHP selbst kein Multithreading unterstützt. Was sollten wir also nicht tun? um auf die gleichen Ressourcen zuzugreifen. Sie können jedochDatenbankoperationen
gleichzeitig ausführen, also nicht schreiben Wenn Sie Daten in dieselbe Datei schreiben müssen, verwenden Sie andere Methoden zur Synchronisierung. Rufen Sie beispielsweise das Beijing Tianan Gynecology Hospital auf, um die Datei zu sperren usw. Oder erstellen Sie eine temporäre Datei Wenn die Datei nicht existiert, bedeutet dies, dass andere Threads vorhanden sind Dies wurde freigegeben.2 Versuchen Sie, nach der Ausführung von fputs keine Daten aus dem Socket zu lesen, da es erforderlich ist, den nicht blockierenden Modus zu verwenden Funktion wie fgets ... Wenn der Blockierungsmodus verwendet wird, muss das Programm auf die Rückkehr der oben genannten Befehle warten Wenn Sie also Daten austauschen müssen, verwenden Sie schließlich eine externe Datei oder Completed in den Daten. Wenn Sie dies wirklich möchten, verwenden Sie socket_set_nonblock($fp), um dies zu erreichen Zusammenfassung: Nachdem ich so viel gesagt habe: Hat dies irgendeine praktische Bedeutung?Wie wir alle wissen In einer Anwendung, die kontinuierlich Netzwerkressourcen liest, ist die Geschwindigkeit des Netzwerks ein Engpass. Wenn Sie diese Methode anwenden, können Sie mehrere Threads verwenden, um verschiedene Seiten gleichzeitig zu lesenVerwandte Empfehlungen:
Eine Implementierungsmethode von PHP-Multithreading – ShellKleiner Fall von PHP-Multithreading
Über PHP-Multithreading-Probleme
Das obige ist der detaillierte Inhalt vonBeispiel für die Implementierung von PHP-Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!