parallel 철학

이 섹션에는 병렬 코드 작성에 중요한 철학과 병렬의 내부 구현에 대한 세부 정보가 포함되어 있습니다.


메모리를 공유하여 통신하지 마십시오. 대신 통신을 통해 메모리를 공유하십시오.

병렬에 의해 수용되는 이 철학은 현재 병렬 코드를 작성하는 데 사용되지 않는 가장 널리 찬사받는 플랫폼 중 하나인 Go에서 시작되었습니다. Go 프로그래머는 이 이상에 부응하기 위해 열심히 일해야 합니다. PHP와 병렬은 프로그래머를 위한 모든 힘든 작업을 기본적으로 수행합니다.

다른 언어에서 볼 수 있는 기존의 스레딩 모델에서 일반적으로 스레드는 동일한 주소 공간에서 작동한다는 사실만으로도 서로 통신합니다. 프로그래머는 상태와 일관성의 적절한 통신을 보장하기 위해 상호 배제, 조건 변수 및 기타 저수준 스레딩 또는 동기화 기본 요소를 배포해야 합니다.

기존 모델이 반전되면 스레드는 통신의 결과로 메모리만 공유한다는 의미입니다(예: 채널을 통해 변수가 전달됨).

병렬이 어떤 수단(태스크 인수, Future를 통한 반환 및 채널)을 통해 한 스레드에서 다른 스레드로 변수를 전달할 때 값으로 전달됩니다. 버퍼링되지 않은 채널을 제외한 모든 경우에 변수는 버퍼링되어 변수가 전달되는 스레드에서 사용되기 전에 변경(또는 소멸)되지 않을 수 있습니다. 채널을 통한 버퍼링되지 않은 읽기는 스레드가 다른 스레드에 의해 할당된 메모리를 직접 읽는 유일한 인스턴스이며 메모리를 소유한 스레드가 계속해서 조작할 수 있기 전에 읽기가 완료되기를 기다리고 있기 때문에 안전하게 읽을 수 있습니다. 메모리를 소유하지 않는 스레드는 값으로 읽습니다. 두 스레드가 계속되면 더 이상 메모리를 공유하지 않습니다.

이것은 병렬 코드에 대한 작성 및 추론을 기존의 스레딩 모델보다 훨씬 쉽게 만듭니다. 이는 프로그래머가 스레드가 동시에 데이터를 조작할 수 있다는 것을 고려할 필요가 없다는 것을 의미합니다. 이는 불가능하기 때문입니다.

이것은 또한 PHP를 CSP(채널을 통한 메시지 전달) 기반의 병렬 동시성 API 구현을 위한 완벽한 플랫폼으로 만듭니다. PHP 자체는 공유되지 않기 때문입니다. PHP 스레드는 기본적으로 자체 가상 주소 공간에서 작동하므로 통신을 통해서만 메모리를 공유할 수 있습니다.


데이터에는 확실한 단일 소유자가 있어야 합니다.

CSP 모델에 처음 접근할 때 전통적인 스레딩 모델에 정통한 프로그래머는 동시 데이터 구조를 찾는 자신을 발견할 수 있습니다. 동시 데이터 구조도 사용되기 때문입니다. 조작을 위해 공유 개체를 전달합니다.

CSP 모델의 경우 여러 작업에서 데이터 구조를 공유할 필요가 없으며 실제로 공유하지 않는 경우 더 간단합니다. 데이터는 단일 작업이 소유해야 하며, 해당 데이터 구조에 대한 변경(또는 작업)은 채널을 통해 전달되어야 하고 데이터 소유자가 수행해야 하며, 변경(또는 작업)의 성공, 실패 또는 결과(상태) ) 다시 전달됩니다.

다시 한 번 PHP의 공유 없음 특성과 병렬의 값 복사 특성은 프로그래머가 이 목표를 달성하는 데 도움이 됩니다. 데이터는 통신의 결과로만 우연히 공유되지 않습니다.