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
Table of Contents
- parallel\Channel::__construct — Channel Construction
- parallel\Channel::make — Access
- parallel\Channel::open — Access
- parallel\Channel::recv — Sharing
- parallel\Channel::send — Sharing
- parallel\Channel::close — Closing