Paralel
Paralel, program içinde birden fazla asenkron görevin aynı anda gerçekleştirilmesine olanak tanıyan bir paralel görev planlama aracıdır ve tüm görevler tamamlandıktan sonra sonuçları almayı sağlar. Paralel, Barrier tabanlı olarak gerçekleştirilmiştir.
Not
Altyapı otomatik olarak sürücü türünü tanır, yalnızca Swoole/Swow/Fiber sürücüleri desteklenmektedir.İpucu
Bu özellik workerman>=5.1.0 gerektirir.
<?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 Sunucusu
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Veya Swow::class veya Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
$parallel = new Parallel();
for ($i=1; $i<5; $i++) {
$parallel->add(function () use ($i) {
// Bir şey yap
return $i;
});
}
$results = $parallel->wait();
$connection->send(json_encode($results)); // Yanıt: [1,2,3,4]
};
Worker::runAll();
Arayüz Açıklaması
interface ParallelInterface
{
/**
* Yapıcı fonksiyon, $concurrent eşzamanlı görev sayısını belirtir, -1 eşzamanlı görev sayısında sınırlama yoktur
*/
public function __construct(int $concurrent = -1);
/**
* Bir eşzamanlı görev ekle
*/
public function add(callable $callable, ?string $key = null): void;
/**
* Tüm görevlerin tamamlanmasını bekle ve sonuçları döndür
*/
public function wait(): array;
/**
* Görev sırasında oluşan istisnaların sonuçlarını al
*/
public function getExceptions(): array;
}