La classe parallel\Channel

(0.9.0)

canaux non tamponnés

Un canal non tamponné bloquera les appels à parallel\Channel::send() jusqu'à ce qu'il y ait un récepteur, et bloquera les appels à parallel\Channel::recv() jusqu'à ce qu'il y ait un émetteur. Cela signifie qu'un canal non tamponné n'est pas seulement un moyen de partager des données entre les tâches mais aussi une méthode simple de synchronisation.

Un canal non tamponné est le moyen le plus rapide de partager des données entre les tâches, nécessitant le moins de copie.

canaux tamponnés

Un canal tamponné ne bloquera pas les appels à parallel\Channel::send() jusqu'à ce que la capacité soit atteinte, les appels à parallel\Channel::recv() bloqueront jusqu'à ce qu'il y ait des données dans le tampon.

Fermetures sur les canaux

Une fonctionnalité puissante des canaux parallèles est qu'elles permettent l'échange de fermetures entre les tâches (et les runtimes).

Lorsqu'une fermeture est envoyée sur un canal, la fermeture est tamponnée, cela ne change pas le tampon du canal transmettant la fermeture, mais cela affecte la portée statique à l'intérieur de la fermeture: la même fermeture envoyée à différentes exécutions, ou à la même exécution, ne partagera pas leur portée statique.

Cela signifie que chaque fois qu'une fermeture est exécutée qui a été transmise par un canal, l'état statique sera tel qu'il était lorsque la fermeture a été tamponnée.

canaux anonymes

La construction de canaux anonymes permet au développeur d'éviter d'attribuer des noms à chaque canal: parallel générera un nom unique pour les canaux anonymes.

Synopsis de la classe

final class parallel\Channel {
/* Constructeur anonymes */
public __construct()
public __construct(int $capacity)
/* Accès */
public make(string $name): Channel
public make(string $name, int $capacity): Channel
public open(string $name): Channel
/* Partage */
public recv(): mixed
public send(mixed $value): void
/* Fermer */
public close(): void
/* Constantes pour le tamponnement infini */
const Infinite;
}

Sommaire