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:
capacity = 0— Rendezvous-Channel (ungepuffert). Diesend()-Operation suspendiert den Sender, bis eine andere Coroutinerecv()aufruft. Dies gewährleistet synchrone Datenübertragung.capacity > 0— Gepufferter Channel. Diesend()-Operation blockiert nicht, solange im Puffer Platz ist. Wenn der Puffer voll ist, wird der Sender suspendiert, bis Platz frei wird.
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
- Channel::send — Einen Wert an den Channel senden
- Channel::recv — Einen Wert vom Channel empfangen
- Channel::capacity — Die Kapazität des Channels abfragen
- Channel::close — Den Channel schließen