Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich Multithreading in PHP implementieren?

Wie kann ich Multithreading in PHP implementieren?

Linda Hamilton
Freigeben: 2024-12-25 06:24:12
Original
552 Leute haben es durchsucht

How Can I Implement Multithreading in PHP?

So verwenden Sie Multithreading in PHP

Einführung

Ist es möglich, das Multithreading-Modell in PHP zu implementieren, ob es tatsächlich implementiert werden soll? es oder simulieren Sie es einfach. Zuvor wurde vorgeschlagen, das Betriebssystem zu zwingen, eine weitere Instanz der ausführbaren PHP-Datei zu laden und andere gleichzeitige Prozesse zu verarbeiten.

Das Problem dabei ist, dass sich die PHP-Instanz nach Abschluss der Ausführung des PHP-Codes immer noch im Speicher befindet, da sie nicht von PHP aus beendet werden kann. Sie können sich also vorstellen, was passiert, wenn Sie mehrere Threads simulieren. Daher suche ich immer noch nach einer Möglichkeit, Multithreading in PHP effizient durchzuführen oder zu simulieren. Irgendwelche Ideen?

Multi-Threading ist in PHP möglich

Ja, Sie können pthreads für Multi-Threading in PHP verwenden.

Laut der PHP-Dokumentation:

pthreads ist eine objektorientierte API, die alle für Multithreading in PHP erforderlichen Tools bereitstellt. PHP-Anwendungen können Threads, Worker-Threads und Thread-Objekte erstellen, lesen, schreiben, ausführen und synchronisieren.

Warnung:
Die pthreads-Erweiterung kann nicht in einer Webserverumgebung verwendet werden. Daher sollte Multithreading in PHP auf CLI-basierte Anwendungen beschränkt werden.

Einfacher Test

#!/usr/bin/php
<?php
class AsyncOperation extends Thread {

    public function __construct($arg) {
        $this->arg = $arg;
    }

    public function run() {
        if ($this->arg) {
            $sleep = mt_rand(1, 10);
            printf('%s: %s  -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep);
            sleep($sleep);
            printf('%s: %s  -finish' . "\n", date("g:i:sa"), $this->arg);
        }
    }
}

// 创建一个数组
$stack = array();

// 启动多线程
foreach ( range("A", "D") as $i ) {
    $stack[] = new AsyncOperation($i);
}

// 启动所有线程
foreach ( $stack as $t ) {
    $t->start();
}

?>
Nach dem Login kopieren

Eigentlicher Fall

error_reporting(E_ALL);
class AsyncWebRequest extends Thread {
    public $url;
    public $data;

    public function __construct($url) {
        $this->url = $url;
    }

    public function run() {
        if (($url = $this->url)) {
            /*
             * 如果请求大量数据,你可能想要使用 fsockopen 和 read,并在读取之间使用 usleep
             */
            $this->data = file_get_contents($url);
        } else
            printf("Thread #%lu was not provided a URL\n", $this->getThreadId());
    }
}

$t = microtime(true);
$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10));
/* 开始同步 */
if ($g->start()) {
    printf("Request took %f seconds to start ", microtime(true) - $t);
    while ( $g->isRunning() ) {
        echo ".";
        usleep(100);
    }
    if ($g->join()) {
        printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data));
    } else
        printf(" and %f seconds to finish, request failed\n", microtime(true) - $t);
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Multithreading in PHP implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage