2013-07-05 11 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

関連する問題