なんじゃくにっき

プログラミングの話題中心。

Scala de Design Pattern: Actor

 Aciive Objectパターンとも。
パターン自体の説明は↓を見ればよいと思われます。
http://www.cs.wustl.edu/~schmidt/PDF/Act-Obj.pdf
 
ざっくり言うと、 
非同期なメッセージをやりとりするためのオブジェクトで、
以下の6つの要素を持つ。
1. Proxy: 外部に対して呼び出しのインターフェイスを提供し、Clientから受けた要求をMethod Requestに変換する。
2. Method Request: Clientからの要求をProxyが変換したもの。
3. Activation Queue: Method Requestを貯めておくキュー。
4. Scheduler: Activation QueueからMethod Requestを取り出してServantに渡す。
5. Servant: 作業を行う子。
6. Future: 実行結果を呼び出し元に返す子。
 
 
 ScalaのActorがこれに当たる(名前からしてそのまんま)。
Scala Docを読むと以下の2つを読めと書いてある。
http://lamp.epfl.ch/~phaller/doc/haller07coord.pdf
http://lampwww.epfl.ch/~odersky/papers/jmlc06.pdf 
 
ScalaのActorのどの要素が上記1〜6に対応するかと考えると、
1. Proxy: react / receiveメソッド(とパターンマッチの部分?)
2. Method Request: (Actorに送られたメッセージは変換されずにMailBoxに詰められている?)
3. Activation Queue: MailBox。
4. Scheduler: Actorは内部的にSchedulerを持つ。普通使う際は直接は見えない。
5. Servant: react / receive内に書く処理の中身。
6. Future: Responder。ActorからのResponseの部分。
 
 
 自分で1から実装しようとすると大変そうなのでコードなし。申し訳ない。
言語の標準ライブラリとして実装されているってスバラシイ。