# A classe parallel\Channel

(0.9.0)

## Channels sem buffer

Um channel sem buffer bloqueará chamadas para parallel\Channel::send() até que haja um receptor e bloqueará chamadas para parallel\Channel::recv() até que haja um remetente. Isso significa que um channel sem buffer não é apenas uma forma de compartilhar dados entre tarefas, mas também um método simples de sincronização.

Um channel sem buffer é a maneira mais rápida de compartilhar dados entre tarefas, exigindo menos cópias.

## Channels em buffer

m canal em buffer não bloqueará chamadas para parallel\Channel::send() até que a capacidade seja atingida, chamadas para parallel\Channel::recv() serão bloqueadas até que haja dados no buffer.

## Closures sobre Channels

Uma característica poderosa dos channels paralelos é que eles permitem a troca de closures entre tarefas (e tempos de execução).

Quando um closure é enviado através de um channel, o closure é armazenado em buffer, isso não altera o buffer do channel que transmite o closure, mas afeta o escopo estático dentro do closure: O mesmo closure enviado para tempos de execução diferentes, ou o mesmo tempo de execução, não compartilharão seu escopo estático.

Isso significa que sempre que for executado um closure transmitido por um channel, o estado estático será o mesmo de quando o closure foi armazenado em buffer.

## Channels Anônimos

O construtor de channel anônimo permite ao programador evitar atribuir nomes a cada channel: parallel gerará um nome exclusivo para channels anônimos.

## Resumo da classe

final class parallel\Channel {
/* Construtor Anônimo */
public function __construct()
public function __construct(int `$capacity`)
/* Acesso */
public function make(string `$name`): Channel
public function make(string `$name`, int `$capacity`): Channel
public function open(string `$name`): Channel
/* Compartilhamento */
public function recv(): mixed
public function send(mixed `$value`): void
/* Encerramento */
public function close(): void
/* Constante para Buffer Infinito */
const Infinite;
}

## Índice

- parallel\Channel::__construct — Construção de canal
- parallel\Channel::make — Construção de canal
- parallel\Channel::open — Acesso
- parallel\Channel::recv — Compartilhamento
- parallel\Channel::send — Compartilhamento
- parallel\Channel::close — Fechamento

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open