gparsの?actor model

52
GPars の? Actor Model pocketberserker 2013 3 9

Upload: pocketberserker

Post on 22-Jun-2015

2.023 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: GParsの?Actor Model

GParsの? Actor Model

pocketberserker

2013年 3月 9日

Page 2: GParsの?Actor Model

自己紹介

• 中山 /なかやん /ぺんぎん• @pocketberserker / id:pocketberserker• どこにでもいるふつーのぺんぎん• F# / Haskell / Erlang / Scala / TDD• FSharpx、Scalazのこんとりびゅーた• Groovyは…イベントでたまに使う?

Page 3: GParsの?Actor Model

発表者になった経緯とか

宇佐美ミィさん(仮称)の質問に答えていたら発表者になっていた

Page 4: GParsの?Actor Model

発表者になった経緯とか

宇佐美ミィさん(仮称)の質問に答えていたら発表者になっていた

Page 5: GParsの?Actor Model

本題の前に…

• Actorモデルを知っている?• GParsを知っている?• Actorモデルを使い倒している?• GParsのActorを使い倒している?

Page 6: GParsの?Actor Model

本題の前に…

• Actorモデルを知っている?

• GParsを知っている?• Actorモデルを使い倒している?• GParsのActorを使い倒している?

Page 7: GParsの?Actor Model

本題の前に…

• Actorモデルを知っている?• GParsを知っている?

• Actorモデルを使い倒している?• GParsのActorを使い倒している?

Page 8: GParsの?Actor Model

本題の前に…

• Actorモデルを知っている?• GParsを知っている?• Actorモデルを使い倒している?

• GParsのActorを使い倒している?

Page 9: GParsの?Actor Model

本題の前に…

• Actorモデルを知っている?• GParsを知っている?• Actorモデルを使い倒している?• GParsのActorを使い倒している?

Page 10: GParsの?Actor Model

謝罪

GParsまで行き着くかわかりません

Page 11: GParsの?Actor Model

謝罪

GParsまで行き着くかわかりません

Page 12: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ• メッセージパッシングの一つ• Actor =計算実体(Computational Entity)• 哲学「全てのものはActorである」• 操作的意味論

Page 13: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ

• メッセージパッシングの一つ• Actor =計算実体(Computational Entity)• 哲学「全てのものはActorである」• 操作的意味論

Page 14: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ• メッセージパッシングの一つ

• Actor =計算実体(Computational Entity)• 哲学「全てのものはActorである」• 操作的意味論

Page 15: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ• メッセージパッシングの一つ• Actor =計算実体(Computational Entity)

• 哲学「全てのものはActorである」• 操作的意味論

Page 16: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ• メッセージパッシングの一つ• Actor =計算実体(Computational Entity)• 哲学「全てのものはActorである」

• 操作的意味論

Page 17: GParsの?Actor Model

Actor Modelとは

• 並行計算モデルの一つ• メッセージパッシングの一つ• Actor =計算実体(Computational Entity)• 哲学「全てのものはActorである」• 操作的意味論

Page 18: GParsの?Actor Model

Actorの振る舞い

• Actorに有限個のメッセージを送信• 有限個の新たなActorの生成• メッセージを受信し、受信したメッセージに応じた動作を行う

• 上記振る舞いを並列的に実行する

Page 19: GParsの?Actor Model

Actorの振る舞い

• Actorに有限個のメッセージを送信

• 有限個の新たなActorの生成• メッセージを受信し、受信したメッセージに応じた動作を行う

• 上記振る舞いを並列的に実行する

Page 20: GParsの?Actor Model

Actorの振る舞い

• Actorに有限個のメッセージを送信• 有限個の新たなActorの生成

• メッセージを受信し、受信したメッセージに応じた動作を行う

• 上記振る舞いを並列的に実行する

Page 21: GParsの?Actor Model

Actorの振る舞い

• Actorに有限個のメッセージを送信• 有限個の新たなActorの生成• メッセージを受信し、受信したメッセージに応じた動作を行う

• 上記振る舞いを並列的に実行する

Page 22: GParsの?Actor Model

Actorの振る舞い

• Actorに有限個のメッセージを送信• 有限個の新たなActorの生成• メッセージを受信し、受信したメッセージに応じた動作を行う

• 上記振る舞いを並列的に実行する

Page 23: GParsの?Actor Model

メッセージの送受信は並行

• メッセージの送受信順序は不確定• 最初に送信したメッセージが最初に届く保証は無い

Page 24: GParsの?Actor Model

メッセージの送受信は並行

• メッセージの送受信順序は不確定

• 最初に送信したメッセージが最初に届く保証は無い

Page 25: GParsの?Actor Model

メッセージの送受信は並行

• メッセージの送受信順序は不確定• 最初に送信したメッセージが最初に届く保証は無い

Page 26: GParsの?Actor Model

さて

このあたりで公理的法則群の一部を見てみましょう

Page 27: GParsの?Actor Model

Actor Systemの公理的法則群

Henry Baker “Laws for Communicating ParallelProcesses”

Page 28: GParsの?Actor Model

ActorであるA自身とAの隣人の集合� �acquaintances*(A) =

{A} U acquaintances(A)

U acquaintances2(A) U ... (ad infinitum)� �

Page 29: GParsの?Actor Model

イベントE

Actor計算における離散的なステップ

Page 30: GParsの?Actor Model

イベントEの表記� �[T <˜˜ M]� �• messenger(E) . . .送る側のメッセージ• terget(E) . . . Eにおいてメッセージを受け取る

Page 31: GParsの?Actor Model

Eと直接関係するものの集合� �participants(E) = {target(E), messenger(E))� �

Page 32: GParsの?Actor Model

E1とE2の依存表記� �El ++> E2� �• E1が発生したらE2が活性化される• 一般に半順序(要素が必ずしも比較可能ではない)

• EがE1 . . . Enを活性化することで fork(分岐)を引き起こす可能性がある

Page 33: GParsの?Actor Model

足し算の例

1. 足し算に必要なデータと返信先をActorに送る

2. 計算結果を指定された返信先に送る

Page 34: GParsの?Actor Model

3 + 4の例� �[+ <˜˜ [request: [3 4], reply-to: c]]

+

+

V

[c <˜˜ [reply: 7]]� �

Page 35: GParsの?Actor Model

一つめのイベント� �[+ <˜˜ [request: [3 4], reply-to: c]]� �• タプル [3 4]という引数• “計算結果を cに送信すべき”という継続• これらのメッセージを+に送信する

Page 36: GParsの?Actor Model

ふたつめのイベント� �[c <˜˜ [reply: 7]]� �• 計算結果 7を返信データとして cに送信する

Page 37: GParsの?Actor Model

simple primitive actorの記述方法� �[x <˜˜ [request: m, reply-to: c)]� �• 計算結果 7を返信データとして cに送信する

Page 38: GParsの?Actor Model

階乗の例� �[factorial <˜˜ [request: [3], reply-to: c]]

+

V

[loop <(˜˜ [request: [3 1], reply-to: c]]

+

+

V

[ loop <˜˜ [request: [2 3], reply-to: c]]

+

+

V

[loop <˜˜ [request: [1 6], reply-to: c]]

+

+

V

[c <˜˜ [reply: 6]]� �

Page 39: GParsの?Actor Model

factorial内の loop

• factorialは loopを呼び出す• loopは [index product]という引数が必要• indexが 1なら結果を返す継続を実行• indexが 1以外なら [(index - 1) (index *

product)]を引数としたメッセージを loopに送る

• indexの初期値は factorialで受け取ったデータ(ここでは 3)

• productの初期値は 1

Page 40: GParsの?Actor Model

こんな感じで . . .

• 論文では公理的法則群が書かれている• Arrival Orderingsで到着順序の話とか• ラムダ計算の記述例などが続く• が、長いのでここでは飛ばす

Page 41: GParsの?Actor Model

こんな感じで . . .

• 論文では公理的法則群が書かれている

• Arrival Orderingsで到着順序の話とか• ラムダ計算の記述例などが続く• が、長いのでここでは飛ばす

Page 42: GParsの?Actor Model

こんな感じで . . .

• 論文では公理的法則群が書かれている• Arrival Orderingsで到着順序の話とか

• ラムダ計算の記述例などが続く• が、長いのでここでは飛ばす

Page 43: GParsの?Actor Model

こんな感じで . . .

• 論文では公理的法則群が書かれている• Arrival Orderingsで到着順序の話とか• ラムダ計算の記述例などが続く

• が、長いのでここでは飛ばす

Page 44: GParsの?Actor Model

こんな感じで . . .

• 論文では公理的法則群が書かれている• Arrival Orderingsで到着順序の話とか• ラムダ計算の記述例などが続く• が、長いのでここでは飛ばす

Page 45: GParsの?Actor Model

Actorの表現� �[F <˜˜ [request: argument-tuple, reply-to: continuation]]

[continuation <˜˜ [reply: answer]]

[X <˜˜ [request: message, reply-to: C]]� �

Page 46: GParsの?Actor Model

Actorの実装例

• Erlangのあれ• ScalaのAkka• GParsのActor• etc . . .

Page 47: GParsの?Actor Model

Actorの実装

• 実装方法は様々• fault-toleranceな方向は共通• let it crash(クラッシュさせちゃいなよ)

Page 48: GParsの?Actor Model

Actorの実装

• 実装方法は様々

• fault-toleranceな方向は共通• let it crash(クラッシュさせちゃいなよ)

Page 49: GParsの?Actor Model

Actorの実装

• 実装方法は様々• fault-toleranceな方向は共通

• let it crash(クラッシュさせちゃいなよ)

Page 50: GParsの?Actor Model

Actorの実装

• 実装方法は様々• fault-toleranceな方向は共通• let it crash(クラッシュさせちゃいなよ)

Page 51: GParsの?Actor Model

話していないこと

• スケーラビリティ(Lock Freeとの差はうさみみさんが並行/並列基礎勉強会で話してくれるかと)

• OneForOne、OneForAll• メッセージは immutable云々

Page 52: GParsの?Actor Model

まとめ

• 「全てのものはActorである」という哲学• 実装は様々• 並行/並列基礎勉強会では喋りません