Parallel
Parallel ist ein Tool zur parallelen Aufgabenplanung, das die gleichzeitige Ausführung mehrerer asynchroner Aufgaben in einem Programm ermöglicht und die Ergebnisse nach Abschluss aller Aufgaben zurückgibt. Parallel basiert auf Barrier.
Hinweis
Die zugrunde liegende Treibererkennung erfolgt automatisch und unterstützt nur die Treiber Swoole/Swow/Fiber.Tipp
Diese Funktion erfordert workerman>=5.1.0
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Parallel;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Oder Swow::class oder Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
$parallel = new Parallel();
for ($i=1; $i<5; $i++) {
$parallel->add(function () use ($i) {
// Etwas tun
return $i;
});
}
$results = $parallel->wait();
$connection->send(json_encode($results)); // Antwort: [1,2,3,4]
};
Worker::runAll();
Schnittstellenerklärung
interface ParallelInterface
{
/**
* Konstruktor, $concurrent ist die Anzahl der parallelen Aufgaben, -1 bedeutet keine Begrenzung der parallelen Aufgaben
*/
public function __construct(int $concurrent = -1);
/**
* Fügen Sie eine parallele Aufgabe hinzu
*/
public function add(callable $callable, ?string $key = null): void;
/**
* Warten Sie, bis alle Aufgaben abgeschlossen sind, und geben Sie die Ergebnisse zurück
*/
public function wait(): array;
/**
* Holen Sie sich die Ergebnisse, in denen während der Aufgaben Ausnahmen aufgetreten sind
*/
public function getExceptions(): array;
}