BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Kilim - Java で利用できるアクタとメッセージパッシング

Kilim - Java で利用できるアクタとメッセージパッシング

「マルチコア危機: Scala と Erlang の対立(参考記事)」で述べたように、並行処理のメッセージパッシングとアクタモデルは、現在そして特に今後の CPU を活用するために必要とされる大規模な並列化を実現する方法として期待が寄せられている。Erlang にはその仕組みが最初から組み込まれているし、Scala は Scala Actor ライブラリをフレームワークの中に組み入れているが、他に Kilim (リンク)というピュア Java のソリューションも存在する。

Kilim は Java のためのメッセージパッシングフレームワークで、超軽量なスレッドおよび、コピーを行わない高速で安全なスレッド間メッセージングを実現する仕組みを提供しているということらしい。

Kilim はバイトコードのポストプロセッサ(ウェーバー)、バッファリングされたメールボックス(マルチプロデューサ、シングルコンシューマのキュー)をもつランタイムライブラリ、ユーザレベルのスケジューラ、スレッド間の干渉が起こらないことを保証するためにメッセージ内のポインタ配置に制約を課している型システムから構成される。

これらはちゃんと実現されているようだ。Sriram Srinivasan 氏は Google Tech Talk のセッションで(リンク)、Kilim のタスク切替は Java のスレッドの 1000 倍、メッセージパッシングは Erlang の 3 倍の高速だと語っている。

Kilim はメソッドとその引数にアノテーションを付加することで動作する。メソッド呼出のチェインのどこかで Actor.sleep() や Mailbox.get() といった Kilim のメソッドを呼び出すメソッドは @pausable としてアノテートし、他の pausable なメソッドを直接または間接に呼び出すメソッドも @pausable とする。アノテーションを付加されたコードは、バイトコードウェーバーによって、継続パッシングスタイルのコードへと変換される。継続は一部の言語ではネイティブでサポートされているが、Java では RIFE や Jetty といったよく知られた WEB フレームワークや WEB サーバで組み込まれている。

一方、引数のほうは @free、@cuttable、@safe というアノテーションが付加される。これら引数用の限定子については、Sriram Srinivasan 氏と Alan Mycroft 氏が ECOOP 2008 のプレゼンテーションで (PDF・英語)説明している。

これらの限定子は、オブジェクトツリーにおけるオブジェクトの状態に対する二つの直交する観点から理解することができる。一つ目の観点は、そのオブジェクトが他のオブジェクトから参照されているかどうか(参照されていない場合、ルートと呼ぶ)、二つ目の観点は、そのオブジェクトが構造的に変更可能であるかどうか(そのオブジェクトのもつ参照型のフィールドが変更可能かどうか)、だ。後者には推移的な特性がある。あるオブジェクトは、その親となるオブジェクトが構造的に変更可能であれば、自身も構造的に変更可能である。

これらを踏まえ、ツリーのルートでありかつ構造的に変更可能なオブジェクトは free となる。cuttable なオブジェクトはルートかもしれないしそうでないかもしれないが、構造的に変更可能である。safe であるオブジェクトは構造的に変更可能であってはならず(推移的にも変更可能であってはならない)、ただ、それがルートであるかどうかは問わない。

アクタモデルはますます多くのコンテキストに登場してきており、将来的には言語やプラットフォームを問わず利用できるようになるだろう。その概念は重要なものになりつつある。

原文はこちらです:   http://www.infoq.com/news/2008/06/kilim-message-passing-in-java

この記事に星をつける

おすすめ度
スタイル

BT