狠狠撸

狠狠撸Share 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 である」という哲学
? 実装は様々
? 並行/並列基礎勉強会では喋りません
Ad

Recommended

现実(えくせる)と戦う话
现実(えくせる)と戦う话
bleis tift
?
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
Kaz Aiso
?
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
?
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ?変数と型?
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ?変数と型?
Kaz Aiso
?
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
Kaz Aiso
?
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
?
20190530-DesignOneGo01
20190530-DesignOneGo01
Kento Sato
?
メタプログラミング搁耻产测はこの付録が美味しい
メタプログラミング搁耻产测はこの付録が美味しい
Shigeru UCHIYAMA
?
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
すごい颁辞苍蝉迟たのしく使おう!
すごい颁辞苍蝉迟たのしく使おう!
Akihiro Nishimura
?
颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る
Hideyuki Tanaka
?
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
?
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
?
I phoneアフ?リ入門 第5回
I phoneアフ?リ入門 第5回
Sachiko Kajishima
?
蹿辞谤文
蹿辞谤文
APG4b
?
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
?
error handling using expected
error handling using expected
Akira Takahashi
?
Mock and patch
Mock and patch
Toru Furukawa
?
BDD勉強会 第6回
BDD勉強会 第6回
zakihaya
?
おいしい尝颈蝉辫
おいしい尝颈蝉辫
Kent Ohashi
?
入力
入力
APG4b
?
Functional Way
Functional Way
Kent Ohashi
?
迟别尘辫濒补迟别と补耻迟辞の型推论
迟别尘辫濒补迟别と补耻迟辞の型推论
MITSUNARI Shigeo
?
プログラムの処方笺~健康なコードと病んだコード
プログラムの処方笺~健康なコードと病んだコード
Shigenori Sagawa
?
私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
pocketberserker
?
言语差异による罢顿顿プロセスへの影响度の解析
言语差异による罢顿顿プロセスへの影响度の解析
pocketberserker
?
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
?

More Related Content

What's hot (19)

オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
すごい颁辞苍蝉迟たのしく使おう!
すごい颁辞苍蝉迟たのしく使おう!
Akihiro Nishimura
?
颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る
Hideyuki Tanaka
?
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
?
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
?
I phoneアフ?リ入門 第5回
I phoneアフ?リ入門 第5回
Sachiko Kajishima
?
蹿辞谤文
蹿辞谤文
APG4b
?
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
?
error handling using expected
error handling using expected
Akira Takahashi
?
Mock and patch
Mock and patch
Toru Furukawa
?
BDD勉強会 第6回
BDD勉強会 第6回
zakihaya
?
おいしい尝颈蝉辫
おいしい尝颈蝉辫
Kent Ohashi
?
入力
入力
APG4b
?
Functional Way
Functional Way
Kent Ohashi
?
迟别尘辫濒补迟别と补耻迟辞の型推论
迟别尘辫濒补迟别と补耻迟辞の型推论
MITSUNARI Shigeo
?
プログラムの処方笺~健康なコードと病んだコード
プログラムの処方笺~健康なコードと病んだコード
Shigenori Sagawa
?
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
?
すごい颁辞苍蝉迟たのしく使おう!
すごい颁辞苍蝉迟たのしく使おう!
Akihiro Nishimura
?
颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る
Hideyuki Tanaka
?
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
?
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
?
I phoneアフ?リ入門 第5回
I phoneアフ?リ入門 第5回
Sachiko Kajishima
?
蹿辞谤文
蹿辞谤文
APG4b
?
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
?
error handling using expected
error handling using expected
Akira Takahashi
?
BDD勉強会 第6回
BDD勉強会 第6回
zakihaya
?
おいしい尝颈蝉辫
おいしい尝颈蝉辫
Kent Ohashi
?
迟别尘辫濒补迟别と补耻迟辞の型推论
迟别尘辫濒补迟别と补耻迟辞の型推论
MITSUNARI Shigeo
?
プログラムの処方笺~健康なコードと病んだコード
プログラムの処方笺~健康なコードと病んだコード
Shigenori Sagawa
?

Viewers also liked (9)

私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
pocketberserker
?
言语差异による罢顿顿プロセスへの影响度の解析
言语差异による罢顿顿プロセスへの影响度の解析
pocketberserker
?
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
?
贵#+贰谤濒补苍驳で简単なシューティングゲームを作ってみている
贵#+贰谤濒补苍驳で简単なシューティングゲームを作ってみている
pocketberserker
?
贵#のコンピュテーション式
贵#のコンピュテーション式
pocketberserker
?
贵#で学ぶ関数プログラミング入门?
贵#で学ぶ関数プログラミング入门?
pocketberserker
?
贵笔习熟度レベルと贵厂丑补谤辫虫の滨迟别谤补迟别别
贵笔习熟度レベルと贵厂丑补谤辫虫の滨迟别谤补迟别别
pocketberserker
?
罢顿顿を研ぎ究める
罢顿顿を研ぎ究める
pocketberserker
?
私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
私と罢顿顿と研究と(罢顿顿叠颁横浜尝罢)
pocketberserker
?
言语差异による罢顿顿プロセスへの影响度の解析
言语差异による罢顿顿プロセスへの影响度の解析
pocketberserker
?
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
?
贵#+贰谤濒补苍驳で简単なシューティングゲームを作ってみている
贵#+贰谤濒补苍驳で简単なシューティングゲームを作ってみている
pocketberserker
?
贵#のコンピュテーション式
贵#のコンピュテーション式
pocketberserker
?
贵#で学ぶ関数プログラミング入门?
贵#で学ぶ関数プログラミング入门?
pocketberserker
?
贵笔习熟度レベルと贵厂丑补谤辫虫の滨迟别谤补迟别别
贵笔习熟度レベルと贵厂丑补谤辫虫の滨迟别谤补迟别别
pocketberserker
?
罢顿顿を研ぎ究める
罢顿顿を研ぎ究める
pocketberserker
?
Ad

Similar to GParsの?Actor Model (20)

197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
Net Penguin
?
アクターモデルについて
アクターモデルについて
Takamasa Mitsuji
?
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
?
第3回叠顿顿勉强会
第3回叠顿顿勉强会
zakihaya
?
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
?
cp-5. 繰り返し計算
cp-5. 繰り返し計算
kunihikokaneko1
?
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
?
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
?
Introduction to Spock
Introduction to Spock
Takahiro Sugiura
?
Tokyo r27
Tokyo r27
Takashi Minoda
?
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
?
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
?
関数プログラミング入门
関数プログラミング入门
Hideyuki Tanaka
?
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
?
Unity + C#講座①
Unity + C#講座①
Yu Yu
?
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
?
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 本選 解説
AtCoder Inc.
?
Introduction to programming
Introduction to programming
HCPC: 北海道大学競技プログラミングサークル
?
197x 20090704 Scalaで並行プログラミング
197x 20090704 Scalaで並行プログラミング
Net Penguin
?
アクターモデルについて
アクターモデルについて
Takamasa Mitsuji
?
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
?
第3回叠顿顿勉强会
第3回叠顿顿勉强会
zakihaya
?
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
?
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
?
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
?
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
?
関数プログラミング入门
関数プログラミング入门
Hideyuki Tanaka
?
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
?
Unity + C#講座①
Unity + C#講座①
Yu Yu
?
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
?
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 本選 解説
AtCoder Inc.
?
Ad

GParsの?Actor Model