Channel::__construct

(PHP 8.6+, True Async 1.0)

public Channel::__construct(int $capacity = 0)

Erstellt einen neuen Channel zur Datenübergabe zwischen Coroutinen.

Ein Channel ist ein Synchronisationsprimitiv, das Coroutinen den sicheren Datenaustausch ermöglicht. Das Verhalten des Channels hängt vom Parameter $capacity ab:

Parameter

capacity
Die Kapazität des internen Puffers des Channels. 0 — Rendezvous-Channel (Standard), Senden blockiert bis zum Empfang. Positive Zahl — Puffergröße.

Beispiele

Beispiel #1 Rendezvous-Channel (ungepuffert)

<?php

use Async\Channel;

$channel = new Channel(); // capacity = 0

spawn(function() use ($channel) {
    $channel->send('hello'); // Suspendiert, bis jemand recv() aufruft
    echo "Gesendet\n";
});

spawn(function() use ($channel) {
    $value = $channel->recv(); // Empfängt 'hello', entsperrt den Sender
    echo "Empfangen: $value\n";
});

Beispiel #2 Gepufferter Channel

<?php

use Async\Channel;

$channel = new Channel(3); // Puffer für 3 Elemente

spawn(function() use ($channel) {
    $channel->send(1); // Blockiert nicht — Puffer ist leer
    $channel->send(2); // Blockiert nicht — Platz verfügbar
    $channel->send(3); // Blockiert nicht — letzter Platz
    $channel->send(4); // Suspendiert — Puffer ist voll
});

Siehe auch