Modeling Concurrent Computing7. アクターの通信 (1)
• 送信側アクターは
▫ アドレスによって送信先のアクターを指定する
▫ 受信されるのを待たずに次のことをする
• アクターのアドレスの取得方法
▫ 受信したメッセージから取得
▫ 自分が生成したアクターであるので知っている
▫ その他
• 局所性
▫ アドレスを知っている相手にしかメッセージを送
れない
8. アクターの通信 (2)
• 受信側アクターは
▫ 自分のデータを操作する
▫ 新たなメッセージを送る
▫ 新たなアクターをつくる
• 通信のスケールはいろいろ
▫ プロセス間だったり、ネットワーク間だったり
• メッセージは入れ替わりうる
▫ 送信された順に受信されるとは限らない
14. 基本 (1)
• プロセスはオブジェクトである
▫ データを持つ
▫ イベントが来たらデータを操作する
• イベント/チャンネルは通信路である
▫ 他への操作 (スイッチオン/オフなど)
▫ 入力 (mouse?xyなど)
▫ 出力 (screen!bitmapなど)
16. 演算 (1)
• プレフィックス a→P
▫ イベントaと通信したあとにプロセスPを行うプロ
セス
• 決定的選択/外部選択 (a→P)□(b→Q)
▫ 環境がaとbのどちらのイベントを起こすか決定
▫ aが起こったらP、bが起こったらQを行う
▫ 同時にaとbを受け取ったらどうなるかは不定
• 非決定的選択/内部選択 (a→P)∏(b→Q)
▫ プロセスがaとbどちらのイベントを起こすか決定
17. 演算 (2)
• インターリーブ/並行合成 P|||Q
▫ PとQが同時並行に動作
• インターフェース並行/共有 P|[{a}]| Q
▫ PとQが同時並行に動作
▫ イベントaを共有する
• 隠蔽 P\{a}
▫ イベントを観測不可能にする
プロセスの抽象化のため
18. 演算 (3)
• 逐次合成 P; Q
▫ PをしたあとにQをする
• 条件選択 if p then P else Q
▫ pが真ならばPを、偽ならばQを実行する
• タイムアウト P ▷Q
▫ PがタイムアウトしたらQを行う
• 割り込み P△Q
19. 演算 (4)
• 変更 P [[ a←b ]]
▫ プロセスの中のイベントaをイベントbに書き換え
たプロセス
20. 通信 (1)
channel juice
Coin = {10,50,100,500}
channel in:Coin -- コインを入れるところ
VM(n) = if n<120
then in?x → VM(n+x) -- ?で入力
else juice → VM(n-120) --ジュース1本120円
21. 通信 (2)
PERSON = (juice -> SKIP) □
( in!10 -> PERSON -- ! で出力
∏ in!50 -> PERSON
∏ in!100 -> PERSON
∏ in!500 -> PERSON )
SYSTEM = PERSON [|{in,juice}|] VM(0)