2013-07-05 2 views
11

Communicating Sequential Processes에 관한 책에서는 방향이없고 여러 개의 독립적 인 프로세스를 포함 할 수있는 이벤트를 정의하는 데 많은 시간이 소요됩니다.CSP 구현이 채널만을 커버하는 이유는 무엇입니까?

소개 된 채널은 4 장에서만 소개되며 2 가지 프로세스가 포함됩니다.

그러나 occam, Go, LuaCSP 및 clojure.core.async를 포함한 모든 CSP 구현은 채널 만 구현합니다.

(방송) 채널을 통해 가장 실질적인 문제가 해결 될 수 있지만, 나는 왜 그 책을 아무도 사용하지 않는 동안 그 책에 너무 많은 시간을 소비하는 이유가 궁금합니다.

답변

2

Occam-pi에서 장벽은 채널의 중요한 부속 장치입니다. 장벽이있는 경우, 등록 된 각 프로세스는 모두 완료 될 때까지 장벽을 기다립니다. 이 시점에서 그들은 모두 공개됩니다. 이것은 비 채널 CSP 이벤트의 예입니다.

Occam-pi에는 채널을 사용하여 확장 된 랑데부가 있습니다. 이는 Ada의 랑데부와 매우 비슷한 채널 사용 패턴과 매우 다른 패턴입니다.

+0

Java의 CyclicBarrier와 동일한 개념입니까? http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html – Pepijn

+0

나는 그것들이 개념 상 대체로 유사하다고 생각합니다. 나는 그들이 똑같은 것인지 잘 모르겠다. Occam-Pi 장벽은 (모든 동기화 프리미티브와 마찬가지로) 매우 효율적인 구현을 제공합니다. –

9

먼저 책들 모두 happened before 구현. 따라서 귀하의 질문은 다음과 같이 공식화 된 것이 좋습니다 :

왜 CSP를 구현해도 책이 크게 강조 되어도 이벤트에 중점을 두지 않습니다.

기본적으로 이벤트를 언어의 일류 시민으로 만들면 general purpose programming language의 경우 너무 좁은 특정 용도 특이성이 부여됩니다.

event driven programming의 경우에 대비하여 채널 및 기타 구성 요소에 이벤트를 쉽게 구현할 수 있습니다.

+2

이 후자는 동위 원소입니다. CSP와 채널은 자연스럽게 이벤트 중심 스타일을 제공합니다. 차이점은 채널은 이벤트를 처리하기 위해 콜백을 요구하지 않는다는 것입니다. –

+1

이벤트보다 잠금/잠금 해제가 훨씬 더 많습니다. 채널을 통해 전송되는 것은 무엇이든 될 수 있습니다. – thwd

관련 문제