SlideShare a Scribd company logo
GPars の?  Actor Model

     pocketberserker


     2013 年 3 月 9 日
自己紹介




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




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



• Actor モデルを知っている?
本題の前に…



• Actor モデルを知っている?
• GPars を知っている?
本題の前に…



• Actor モデルを知っている?
• GPars を知っている?
• Actor モデルを使い倒している?
本題の前に…



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




GPars まで行き着くかわかりません
Actor Model とは
Actor Model とは



• 並行計算モデルの一つ
Actor Model とは



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



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



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



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



• Actor に有限個のメッセージを送信
Actor の振る舞い



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



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



• Actor に有限個のメッセージを送信
• 有限個の新たな Actor の生成
• メッセージを受信し、受信したメッセージに
  応じた動作を行う
• 上記振る舞いを並列的に実行する
メッセージの送受信は並行
メッセージの送受信は並行




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




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




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




Henry Baker “Laws for Communicating Parallel
                Processes”
Actor である A 自身と A の隣人の集合            

acquaintances*(A) =
{A} U acquaintances(A)
U acquaintances2(A) U ... (ad infinitum)
イベント E




Actor 計算における離散的なステップ
イベント E の表記                

[T ˜˜ M]
                                     


 • messenger(E) . . . 送る側のメッセージ
 • terget(E) . . . E においてメッセージを受け取る
E と直接関係するものの集合                   

participants(E) = {target(E), messenger(E))
E1 と E2 の依存表記               

El ++ E2
                                       


 • E1 が発生したら E2 が活性化される
 • 一般に半順序(要素が必ずしも比較可能では
   ない)
 • E が E1 . . . En を活性化することで fork(分岐)
   を引き起こす可能性がある
足し算の例




1. 足し算に必要なデータと返信先を Actor に
   送る
2. 計算結果を指定された返信先に送る
3 + 4 の例      

[+ ˜˜ [request: [3 4], reply-to: c]]
     +
     +
     V
[c ˜˜ [reply: 7]]
一つめのイベント           

[+ ˜˜ [request: [3 4], reply-to: c]]
                                       


 • タプル [3 4] という引数
 • “計算結果を c に送信すべき” という継続
 • これらのメッセージを + に送信する
ふたつめのイベント   

[c ˜˜ [reply: 7]]
                                


 • 計算結果 7 を返信データとして c に送信する
simple primitive actor の記述方法   

[x ˜˜ [request: m, reply-to: c)]
                                        


 • 計算結果 7 を返信データとして c に送信する
階乗の例                  

[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]]
factorial 内の loop
  • factorial は loop を呼び出す
  • loop は [index product] という引数が必要
  • index が 1 なら結果を返す継続を実行
  • index が 1 以外なら [(index - 1) (index *
    product)] を引数としたメッセージを loop に
    送る
  • index の初期値は factorial で受け取ったデー
    タ(ここでは 3)
  • product の初期値は 1
こんな感じで . . .
こんな感じで . . .



• 論文では公理的法則群が書かれている
こんな感じで . . .



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



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



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

[F ˜˜ [request: argument-tuple, reply-to: continuation]]

[continuation ˜˜ [reply: answer]]

[X ˜˜ [request: message, reply-to: C]]
Actor の実装例



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




• 実装方法は様々
Actor の実装




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




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



• スケーラビリティ(Lock Free との差はうさ
  みみさんが並行/並列基礎勉強会で話してく
  れるかと)
• OneForOne、OneForAll
• メッセージは immutable 云々
まとめ




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

More Related Content

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
I phoneアプリ入門 第5回
I phoneアプリ入門 第5回I phoneアプリ入門 第5回
I phoneアプリ入門 第5回
Sachiko Kajishima
 
for文
for文for文
for文
APG4b
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
Akira Takahashi
 
Mock and patch
Mock and patchMock and patch
Mock and patch
Toru Furukawa
 
BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回zakihaya
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
Kent Ohashi
 
入力
入力入力
入力
APG4b
 
Functional Way
Functional WayFunctional Way
Functional Way
Kent Ohashi
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
 

What's hot (19)

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
C++14 Overview
C++14 OverviewC++14 Overview
C++14 Overview
 
What is template
What is templateWhat is template
What is template
 
I phoneアプリ入門 第5回
I phoneアプリ入門 第5回I phoneアプリ入門 第5回
I phoneアプリ入門 第5回
 
for文
for文for文
for文
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
BDD勉強会 第6回
BDD勉強会 第6回BDD勉強会 第6回
BDD勉強会 第6回
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
入力
入力入力
入力
 
Functional Way
Functional WayFunctional Way
Functional Way
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 

Viewers also liked

私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)pocketberserker
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析pocketberserker
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTpocketberserker
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式pocketberserker
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?pocketberserker
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateepocketberserker
 

Viewers also liked (9)

私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)私とTDDと研究と(TDDBC横浜LT)
私とTDDと研究と(TDDBC横浜LT)
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
TDDBC東京 1.6 LT
TDDBC東京 1.6 LTTDDBC東京 1.6 LT
TDDBC東京 1.6 LT
 
TDDを研ぎ究める
TDDを研ぎ究めるTDDを研ぎ究める
TDDを研ぎ究める
 

Similar to GParsの?Actor Model

197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミングNet Penguin
 
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて
Takamasa Mitsuji
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会zakihaya
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
 
cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算
kunihikokaneko1
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用Nobuaki Oshiro
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
Takahiro Sugiura
 
Tokyo r27
Tokyo r27Tokyo r27
Tokyo r27
Takashi Minoda
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①
Yu Yu
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
AtCoder Inc.
 
Introduction to programming
Introduction to programmingIntroduction to programming

Similar to GParsの?Actor Model (20)

197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
 
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
cp-5. 繰り返し計算
cp-5. 繰り返し計算cp-5. 繰り返し計算
cp-5. 繰り返し計算
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
 
Tokyo r27
Tokyo r27Tokyo r27
Tokyo r27
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
Introduction to programming
Introduction to programmingIntroduction to programming
Introduction to programming
 

GParsの?Actor Model