Channel::__construct

(PHP 8.6+, True Async 1.0)

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

Crée un nouveau canal pour le passage de données entre coroutines.

Un canal est une primitive de synchronisation qui permet aux coroutines d’échanger des données en toute sécurité. Le comportement du canal dépend du paramètre $capacity :

Paramètres

capacity
La capacité du tampon interne du canal. 0 — canal rendez-vous (par défaut), l’envoi bloque jusqu’à la réception. Nombre positif — taille du tampon.

Exemples

Exemple #1 Canal rendez-vous (sans tampon)

<?php

use Async\Channel;

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

spawn(function() use ($channel) {
    $channel->send('hello'); // se suspend jusqu'à ce que quelqu'un appelle recv()
    echo "Envoyé\n";
});

spawn(function() use ($channel) {
    $value = $channel->recv(); // reçoit 'hello', débloque l'expéditeur
    echo "Reçu : $value\n";
});

Exemple #2 Canal avec tampon

<?php

use Async\Channel;

$channel = new Channel(3); // tampon pour 3 éléments

spawn(function() use ($channel) {
    $channel->send(1); // ne bloque pas — le tampon est vide
    $channel->send(2); // ne bloque pas — place disponible
    $channel->send(3); // ne bloque pas — dernier emplacement
    $channel->send(4); // se suspend — le tampon est plein
});

Voir aussi