Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für die Implementierung von PHP-Multithreading

Beispiel für die Implementierung von PHP-Multithreading

黄舟
黄舟Original
2017-11-11 13:32:033669Durchsuche

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(&#39;localhost&#39;, 80, $errno, $errmsg);
        
        fputs($fp, "GET /a.php?act=b\r\n\r\n");        //这里的第二个参数是HTTP协议中规定的请求头
                                //不明白的请看RFC中的定义
        
        fclose($fp);
    }
    function a()
    {
        $fp = fopen(&#39;result_a.log&#39;, &#39;w&#39;);
        fputs($fp, &#39;Set in &#39; . Date(&#39;h:i:s&#39;, time()) . (double)microtime() . "\r\n");
        
        fclose($fp);        
    }
    function b()
    {
        $fp = fopen(&#39;result_b.log&#39;, &#39;w&#39;);
        fputs($fp, &#39;Set in &#39; . Date(&#39;h:i:s&#39;, time()) . (double)microtime() . "\r\n");
        
        fclose($fp);        
    }
    if(!isset($_GET[&#39;act&#39;])) $_GET[&#39;act&#39;] = &#39;a&#39;;
    
    if($_GET[&#39;act&#39;] == &#39;a&#39;)
    {
        runThread();
        a();
    }
    else if($_GET[&#39;act&#39;] == &#39;b&#39;) 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.

Das Obige ist nur ein einfaches Beispiel, Sie können es in

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 jedoch

Datenbankoperationen

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

und warten Sie, bis die Datei verfügbar ist in einem anderen Thread verschwinden while (file_exits('xxx')); Dies bedeutet, dass, wenn diese temporäre Datei vorhanden ist, der Thread tatsächlich in Betrieb ist.

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 lesen

Verwandte Empfehlungen:

Eine Implementierungsmethode von PHP-Multithreading – Shell

Kleiner 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!

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