ThreadChannel::isFull
(PHP 8.6+, True Async 1.0)
php
public ThreadChannel::isFull(): boolGibt true zurück, wenn der Kanalpuffer seine maximale Kapazität erreicht hat.
Bei einem ungepufferten Kanal (capacity = 0) gibt dies immer true zurück, da es keinen Puffer gibt — jedes send() muss auf ein passendes recv() warten.
isFull() ist thread-sicher. Das Ergebnis spiegelt den Zustand zum Zeitpunkt des Aufrufs wider; ein anderer Thread kann unmittelbar danach einen Slot leeren.
Rückgabewerte
true — der Puffer ist an seiner Kapazitätsgrenze (oder es ist ein ungepufferter Kanal). false — der Puffer hat mindestens einen freien Slot.
Beispiele
Beispiel #1 Pufferfüllstand vor dem Senden prüfen
php
<?php
use Async\ThreadChannel;
$channel = new ThreadChannel(3);
echo $channel->isFull() ? "voll" : "hat Platz"; // "hat Platz"
$channel->send('x');
$channel->send('y');
$channel->send('z');
echo $channel->isFull() ? "voll" : "hat Platz"; // "voll"Beispiel #2 Gegendruck-Überwachung in einem Produzenten-Thread
php
<?php
use Async\ThreadChannel;
use function Async\spawn;
use function Async\spawn_thread;
use function Async\await;
spawn(function() {
$channel = new ThreadChannel(10);
$producer = spawn_thread(function() use ($channel) {
$items = range(1, 30);
foreach ($items as $item) {
if ($channel->isFull()) {
// Puffer ist aktuell voll — send() wird blockieren;
// Gegendruck für Beobachtbarkeit protokollieren
error_log("ThreadChannel Gegendruck: Puffer voll");
}
$channel->send($item); // blockiert, bis Platz verfügbar ist
}
$channel->close();
});
$consumer = spawn_thread(function() use ($channel) {
try {
while (true) {
// Langsamen Konsumenten simulieren
$val = $channel->recv();
// $val verarbeiten ...
}
} catch (\Async\ThreadChannelException) {
echo "Fertig\n";
}
});
await($producer);
await($consumer);
});Siehe auch
- ThreadChannel::isEmpty — Prüfen, ob der Puffer leer ist
- ThreadChannel::capacity — Kanalkapazität
- ThreadChannel::count — Anzahl der Werte im Puffer
- ThreadChannel::send — Einen Wert senden (blockiert, wenn voll)
- ThreadChannel-Komponentenübersicht