Heim > Backend-Entwicklung > PHP-Problem > So führen Sie PHP asynchron aus, ohne auf die Rückkehr zu warten, und führen den Code direkt aus

So führen Sie PHP asynchron aus, ohne auf die Rückkehr zu warten, und führen den Code direkt aus

PHPz
Freigeben: 2023-04-03 15:26:01
Original
1338 Leute haben es durchsucht

Bei der PHP-Programmierung müssen Sie manchmal einige zeitaufwändige Vorgänge ausführen, z. B. Netzwerkanfragen stellen, Dateien lesen und schreiben usw. Wenn die herkömmliche Synchronisierung verwendet wird, wartet das Programm, bis der Vorgang abgeschlossen ist und das Ergebnis zurückgegeben wird. Dies führt dazu, dass das Programm während des Wartens keine anderen Dinge tun kann, wodurch die Effizienz des Programms verringert wird.

Und wenn Sie die asynchrone Methode verwenden, können Sie das Programm weiterhin andere Aufgaben ausführen lassen, während Sie auf den Abschluss des Vorgangs warten. Vereinfacht ausgedrückt bedeutet dies, anderen Code direkt auszuführen, ohne auf das Rückgabeergebnis der Operation zu warten, und nach Abschluss der Operation zur Verarbeitung des Rückgabeergebnisses zurückzukehren. Dieser Ansatz verbessert die Effizienz und Parallelität des Programms erheblich.

In PHP werden asynchrone Methoden im Allgemeinen mithilfe von Multiprozessen oder Multithreads implementiert. Diese Methode ist jedoch komplex, fehleranfällig und erfordert in der Regel die Verwendung von Bibliotheken oder Erweiterungen Dritter. Nach PHP 7.2 wurde ein neues asynchrones Programmierframework namens Swoole eingeführt, das einen vollständigen Satz asynchroner Programmierlösungen bietet und gut mit nativem PHP-Code und Bibliotheken von Drittanbietern verwendet werden kann.

Swoole bietet eine Vielzahl asynchroner Programmiermethoden, darunter Coroutinen, asynchrone nicht blockierende E/A, asynchrone Multiprozesse usw. Die am häufigsten verwendete Methode ist Coroutine, die asynchrone Programmierung innerhalb eines einzelnen Threads implementieren kann und die Vorteile von geringem Gewicht und hoher Effizienz bietet.

Im Folgenden stellen wir anhand eines einfachen Beispiels vor, wie man mit Swoole die asynchrone PHP-Ausführung implementiert.

Zuerst müssen wir die Swoole-Erweiterung installieren. Sie können es mit dem folgenden Befehl installieren:

pecl install swoole
Nach dem Login kopieren

Nachdem die Installation abgeschlossen ist, müssen Sie die folgende Konfiguration zur php.ini-Datei hinzufügen:

extension=swoole
Nach dem Login kopieren

Als nächstes schauen wir uns ein einfaches Beispiel an. Wir müssen einen sehr zeitaufwändigen Vorgang durchführen: 5 Sekunden lang schlafen und dann zur aktuellen Zeit zurückkehren. Dieser Vorgang dauert im herkömmlichen Synchronisierungsmodus 5 Sekunden. Im asynchronen Modus mit Swoole können wir diesen Vorgang an den asynchronen Aufgabenpool von Swoole senden und dann sofort zurückkehren. Nach Abschluss der Operation ruft Swoole automatisch die von uns angegebene Rückruffunktion auf und gibt das Operationsergebnis zurück.

<?php

/* 创建Swoole的异步任务池 */
$pool = new Swoole\Process\Pool(4);

/* 添加异步任务 */
$pool->on("WorkerStart", function($pool, $workerId) {
    /* 启动5个不同的异步任务 */
    for ($i = 0; $i < 5; $i++) {
        /* 异步执行一个耗时5秒的任务 */
        $pool->add(function() {
            sleep(5);
            return date("Y-m-d H:i:s");
        });
    }
});

/* 处理异步任务完成的回调函数 */
$pool->on("WorkerStop", function($pool, $workerId) {
    /* 获取执行结果,并输出到控制台 */
    $results = $pool->getResults();
    foreach ($results as $result) {
        echo "{$result}\n";
    }
});

$pool->start();
Nach dem Login kopieren

Im obigen Code erstellen wir einen asynchronen Aufgabenpool mit 4 untergeordneten Prozessen. Dann haben wir in der WorkerStart-Ereignisrückruffunktion 5 verschiedene asynchrone Aufgaben übermittelt und nach Abschluss der Aufgabe eine anonyme Rückruffunktion als Rückruffunktion angegeben. Diese Rückruffunktion empfängt eine Liste von Ergebnisobjekten und gibt den Wert jedes Ergebnisobjekts an die Konsole aus.

Zum Schluss rufen Sie die Startmethode von Swoole auf, um den asynchronen Aufgabenpool zu starten. Wenn alle asynchronen Aufgaben abgeschlossen sind, ruft Swoole automatisch die von uns angegebene Rückruffunktion auf und gibt die Operationsergebnisse zurück. Die Ausführungsergebnisse sind wie folgt:

2021-06-10 21:20:18
2021-06-10 21:20:18
2021-06-10 21:20:18
2021-06-10 21:20:18
2021-06-10 21:20:18
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass die Verwendung der asynchronen Programmiermethode von Swoole die Effizienz und Parallelität von PHP-Programmen erheblich verbessern kann. Durch die Verwendung von Swoole zum Schreiben asynchroner Programme können wir uns mehr auf die Verarbeitung der Geschäftslogik konzentrieren, ohne den Details der zugrunde liegenden Implementierung zu viel Aufmerksamkeit zu schenken.

Das obige ist der detaillierte Inhalt vonSo führen Sie PHP asynchron aus, ohne auf die Rückkehr zu warten, und führen den Code direkt aus. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage