La clase parallel\Channel

(0.9.0)

canales no tamponados

Un canal no tamponado bloqueará las llamadas a parallel\Channel::send() hasta que haya un receptor, y bloqueará las llamadas a parallel\Channel::recv() hasta que haya un emisor. Esto significa que un canal no tamponado no es solo un medio para compartir datos entre las tareas sino también un método simple de sincronización.

Un canal no tamponado es la forma más rápida de compartir datos entre las tareas, requiriendo la menor cantidad de copias.

canales tamponados

Un canal tamponado no bloqueará las llamadas a parallel\Channel::send() hasta que se alcance la capacidad, las llamadas a parallel\Channel::recv() bloquearán hasta que haya datos en el búfer.

Cierres en los canales

Una funcionalidad poderosa de los canales paralelos es que permiten el intercambio de cierres entre las tareas (y los entornos de ejecución).

Cuando un cierre es enviado a través de un canal, el cierre es tamponado, esto no cambia el búfer del canal que transmite el cierre, pero afecta el ámbito estático dentro del cierre: el mismo cierre enviado a diferentes ejecuciones, o a la misma ejecución, no compartirá su ámbito estático.

Esto significa que cada vez que un cierre es ejecutado y ha sido transmitido por un canal, el estado estático será el mismo que cuando el cierre fue tamponado.

canales anónimos

La construcción de canales anónimos permite al desarrollador evitar asignar nombres a cada canal: parallel generará un nombre único para los canales anónimos.

Sinopsis de la Clase

final class parallel\Channel {
/* Constructores anónimos */
public __construct()
public __construct(int $capacity)
/* Acceso */
public make(string $name): Channel
public make(string $name, int $capacity): Channel
public open(string $name): Channel
/* Compartir */
public recv(): mixed
public send(mixed $value): void
/* Cerrar */
public close(): void
/* Constantes para el tamponamiento infinito */
const Infinite;
}

Tabla de contenidos