TL;DR

Communicating Sequential Processes の略。1978 年に C.A.R. Hoare が発表した、並行処理を表現するための形式言語である。

仕組み

CSP では、プロセスが値のコピーを受け渡すことで互いに通信する(メッセージパッシング)。ここでいうプロセスは OS のプロセスではなく、独自の隔離された状態を持つ逐次処理のことである。

通信は、名前付きでバッファを持たないチャネルを介して行われる。

例

Go は、ゴルーチンとチャネルを使ってこのモデルを実装している。Go のデフォルトのチャネルは、CSP と同じくバッファを持たないので、送信側と受信側が同期する。

ただし Go では、チャネルが第一級オブジェクトである点が CSP と異なる。そのため、チャネルを関数や別のチャネルに渡せる。

CSP は Go のほかにも、OCaml、Erlang、Clojure の core.async、Akka などに影響を与えた。

関連

出典