parallel parallel\Channel 클래스

(0.9.0)


버퍼링되지 않은 채널

버퍼링되지 않은 채널은 수신자가 있을 때까지 parallel\Channel::send() 호출을 차단하고 발신자가 있을 때까지 parallel\Channel::recv() 호출을 차단합니다. 즉, 버퍼링되지 않은 채널은 작업 간에 데이터를 공유하는 방법일 뿐만 아니라 간단한 동기화 메서드이기도 합니다.

버퍼링되지 않은 채널은 작업 간에 데이터를 공유하는 가장 빠른 방법이며 최소한의 복사가 필요합니다.


버퍼링된 채널

버퍼링된 채널은 용량에 도달할 때까지 parallel\Channel::send() 호출에서 차단되지 않으며, parallel\Channel::recv() 호출은 버퍼에 데이터가 있을 때까지 차단됩니다.


Closures over Channels

병렬 채널의 강력한 기능은 작업(및 런타임) 간에 클로저를 교환할 수 있다는 것입니다.

클로저가 버퍼링된 채널을 통해 클로저가 전송되면 클로저를 전송하는 채널의 버퍼링이 변경되지 않지만 클로저 내부의 정적 범위에 영향을 미칩니다. 동일한 클로저가 다른 런타임 또는 동일한 런타임으로 전송됨 , 정적 범위를 공유하지 않습니다.

즉, 채널에 의해 전송된 클로저가 실행될 때마다 정적 상태는 클로저가 버퍼링되었을 때와 같습니다.


익명 채널

익명 채널 생성자를 사용하면 프로그래머가 모든 채널에 이름을 할당하지 않아도 됩니다. 병렬은 익명 채널에 대해 고유한 이름을 생성합니다.


클래스 개요

                  
final class parallel\Channel {

  /* Anonymous Constructor */
  public __construct()
  public __construct(int $capacity)

  /* Access */
  public make(string $name): Channel
  public make(string $name, int $capacity): Channel
  public open(string $name): Channel

  /* Sharing */
  public recv(): mixed
  public send(mixed $value): void

  /* Closing */
  public close(): void

  /* Constant for Infinitely Buffered */
  const Infinite;
}
                  
                

목차