- blogs:
- cles::blog

CSP に入門してみた



最近少し CSP (Communicating Sequential Processes) をかじり始めています。
CSP というのはプロセス代数と呼ばれる並行システムを記述して解析するための分野の言語の1つで、クイックソートを発明したことでも知られている C.A.R. Hoare が考案したものです。個人的に形式手法には懐疑的な印象を持っているので、ちょっとどうなのかなという感じでしたが、使えるところだけでうまく切り取れば面白そうな気がしてきました。
日本語の文献は多くないので、詳しく知りたい場合にはトップエスイーシリーズの「並行システムの検証と実装 形式手法CSPに基づく高信頼並行システム開発入門」が役に立ちます。形式手法なので、当然のことながら数学的な臭いが強く、手続き的な記述に慣れた一般的なプログラマーにとって、敷居が高いことは否めません。通常のビジネスアプリであれば、並行化して高速化する恩恵よりも、厄介なバグが増えてしまうリスクの方が大きいという現実があるので普及はゆっくりとしか進まないでしょうが、自前で分散処理をやりたいという場合には役に立ちそうです。僕は昔仕事で、TP モニタをいじっていた時期があるので、こういうのも面白いなと感じました。
どうやって入門するかということになりますが、Occam-pi などの専用のプログラミング言語だと敷居が高いので、簡単に使うためには Java 向けに作られている JCSP を使うのが一番簡単なようです。
以下、プログラミングメモ。
† とりあえずスレッドを書き換えてみる
チャネルを使ってスレッド間(CSPでいうとプロセス間?)通信するのが本筋だろうと思いますが、まずは簡単なスレッドプログラミングを、JCSPで書き換えてみるところからスタートしてみます。
MultiThreadTest.java
上記と等価なプログラムを書くと、こんな感じでしょうか。
Thread と書いていないので、マルチスレッドに見えませんが動かすと並行に動くというのが確認できます。
JCSPTest.java
記述はシンプルになりましたが、単にガリゴリ書いていっただけだと Thread と BlockingQueue を使ったのとあまりかわりませんね。
ちゃんと使いこなすには CSP モデリングして、モデル検証するところまでマスターするのが必須のようです。
唯一のマイナスポイントは JCSP がジェネリクスに対応してないことでしょうか。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5947
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110655)
3 . 年次の人間ドックへ(110284)
4 . 2023 年分の確定申告完了!(1つめ)(109821)
5 . 三菱鉛筆がラミーを買収(109728)