parallel 소개

병렬은 PHP 7.2 이상을 위한 병렬 동시성 확장입니다.

병렬 코어 개념에 대한 간략한 설명은 다음과 같습니다. 더 자세한 정보는 매뉴얼의 이 섹션에서 찾을 수 있습니다.


Runtime

parallel\Runtime은 PHP 인터프리터 스레드를 나타냅니다. parallel\Runtimeparallel\Runtime::__construct()에 전달된 선택적 부트스트랩 파일로 구성됩니다. 이것은 일반적으로 자동 로더 또는 다른 사전 로드 루틴입니다. 부트스트랩 파일은 작업이 실행되기 전에 포함됩니다.

구성 후 parallel\Runtime은 PHP 개체의 일반적인 범위 지정 규칙에 의해 닫히거나, 죽거나, 소멸될 때까지 계속 사용할 수 있습니다. parallel\Runtime::run()을 사용하면 프로그래머가 병렬로 실행할 작업을 예약할 수 있습니다. parallel\Runtime에는 FIFO 일정이 있으며 작업은 예약된 순서대로 실행됩니다.


Functional API

병렬은 자동 스케줄링으로 병렬 코드를 실행하기 위한 단일 함수 진입점을 제공하는 parallel\Runtime 위에 기능적 상위 수준 API를 구현합니다. parallel\run().


Task

작업은 단순히 병렬 실행을 위한 클로저입니다. 클로저는 중첩 클로저를 포함하여 거의 모든 명령을 포함할 수 있습니다. 그러나 작업에서 금지된 몇 가지 지침이 있습니다.

  • yield
  • use by-reference
  • declare class
  • declare named function

메모: 중첩된 클로저는 참조로 생성하거나 사용할 수 있지만 클래스 또는 명명된 함수 선언을 포함해서는 안 됩니다.

메모: 작업에 포함될 수 있는 파일에는 지침이 금지되어 있습니다.


Future

parallel\Future는 작업의 반환 값에 액세스하는 데 사용되며 작업 취소를 위한 API를 노출합니다.


Channel

작업은 인수로 예약하고, 어휘 범위 변수(값별)를 사용하고, 값을 반환(parallel\Future를 통해)할 수 있지만 단방향 통신만 허용합니다. 프로그래머가 데이터를 보내고 데이터를 검색할 수 있습니다. 태스크 사이의 양방향 통신을 허용하지 않습니다. parallel\Channel API는 작업 간의 양방향 통신을 허용하고, parallel\Channel은 프로그래머가 데이터를 보내고 받는 데 사용할 수 있는 작업 간의 소켓과 같은 링크입니다.


Events

parallel\Events API는 기본 느낌(Traversable) 이벤트 루프와 parallel\Events::poll() 메서드를 구현합니다. 프로그래머가 채널 및/또는 미래 세트로 작업할 수 있습니다. 프로그래머는 단순히 이벤트 루프에 채널과 퓨처를 추가하고 선택적으로 parallel\Events::setInput()을 사용하여 쓰기를 위한 입력을 설정합니다. 그리고 foreach: parallel은 발생한 작업을 설명하는 parallel\Events\Event 객체를 생성하는 객체가 사용 가능해지면 객체를 읽고 씁니다.


기타