Koşut Bariyeri Barrier

Barrier, asenkron görevlerde tüm koşutların tamamlanmasını beklemek için kullanılan bir senkronizasyon aracıdır. Barrier, PHP referans sayımı temelinde gerçekleştirilmiştir.

Dikkat
Alt seviye otomatik olarak sürücü türünü tanır, yalnızca Swoole/Swow/Fiber sürücülerini destekler.

İpucu
Bu özellik workerman>=5.1.0 gerektirir.

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Barrier;
use Workerman\Coroutine;
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) {
    $barrier = Barrier::create();
    for ($i=1; $i<5; $i++) {
        Coroutine::create(function () use ($barrier, $i) {
            // Bir şey yap
        });
    }
    // Tüm koşutların tamamlanmasını bekle
    Barrier::wait($barrier);
    $connection->send('Tüm Görevler Tamamlandı');
};

Worker::runAll();

Arayüz Açıklaması

interface BarrierInterface
{
    /**
     * Yeni bir Barrier örneği oluştur
     */
    public static function create(): object;

    /**
     * Mevcut koşutu duraklat, belirtilen Barrier içindeki tüm koşut görevlerinin tamamlanmasını bekle
     */
    public static function wait(object &$barrier, int $timeout = -1): void;
}