KomponentenThreadChannel::isFull()

ThreadChannel::isFull

(PHP 8.6+, True Async 1.0)

php
public ThreadChannel::isFull(): bool

Gibt 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