Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アクターモデル
Search
ytakano
February 02, 2018
Programming
640
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アクターモデル
ytakano
February 02, 2018
More Decks by ytakano
See All by ytakano
論理構造入門
ytakano
0
250
π計算
ytakano
0
88
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
ytakano
0
190
リアクティブプログラミング
ytakano
0
680
MindYourPrivacy: Design and Implementation of a Visualization System for Third-Party Web Tracking - IEEE PST 2014
ytakano
0
560
SF-TAP: Scalable and Flexible Traffic Analysis Platform running on Commodity Hardware
ytakano
0
740
SF-TAP Tutorial Flow Abstractor ver.
ytakano
0
770
Survey of Transactional Memory
ytakano
0
900
CUDA Memo
ytakano
0
720
Other Decks in Programming
See All in Programming
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
160
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
アクセシビリティから考える情報設計
high_g_engineer
0
300
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
930
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
高専キャリア LT 発表内容
crysta1221
6
5.6k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
120
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Facilitating Awesome Meetings
lara
57
7.1k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
GitHub's CSS Performance
jonrohan
1033
470k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
A better future with KSS
kneath
240
18k
New Earth Scene 8
popppiees
3
2.5k
Transcript
アクターモデル 情報通信研究機構 サイバーセキュリティ研究室 ⾼野 祐輝
アクターモデルとは • 並⾏計算モデルの⼀つ • 1973年にCarl Hewittが発明 • アクターと呼ばれるプロセス同⼠が通信をしあって計算を⾏う • 計算能⼒はラムダ計算と等価(チューリング完全)
• プログラミング⾔語 • Erlang, Scala/Akka 2 アクターA アクターB メッセージ
π計算との違い 3 通信の同期⽅法 通信⼿法 メモリモデル π計算 同期通信 チャネルベース通信 共有メモリ アクターモデル
⾮同期通信 直接通信 分散メモリ
ラムダ計算を拡張したアクター⾔語 • アクターモデルの操作的意味論を記述 • ラムダ計算に、並⾏の概念を導⼊して実現 4
構⽂ 5 w ऍ w ΞτϜͱEFpOFఆͷΑ͏ͳͷ w ϖΞͷQS
ɺλϓϧͷ ͷΑ͏ͳͷ w JTQS ϖΞ͔Ͳ͏͔Λݕࠪ͢Δؔ w TU OEɺϖΞͷ൪ɺ൪ͷཁૉΛऔಘ͢ Δؔ A = {true, false, nil, . . . } ΞτϜ N = {0, 1, 2, . . . } ࣗવ X = {x, y, z, . . . } ม F = {+, , =, ispr?, 1st, 2nd, . . . } ϓϦϛςΟϒԋࢉࢠ V ::= A | N | X | X.E ϥϜμந | pr(V, V) ϖΞίϯετϥΫλ E ::= ࣜ V | pr(E, E) ϖΞίϯετϥΫλ | E(E) ؔద༻ | F(E, . . . , E) ϓϦϛςΟϒؔద༻ | br(E, E, E) ݅ذ | letrec X = E in E ࠶ؼఆٛ | send(E, E) ϝοηʔδૹ৴ | new(E) ΞΫλʔੜ | ready(E) ৼΔ͍มߋ
糖⾐構⽂ 6 let x = e1 in e2 x.e2(e1) seq(e1,
e2) let z = e1 in e2 ͨͩ͠ z ৽ن seq(e1, . . . , en) seq(e1, seq(e2, . . . , seq(en 1, en)) . . . ) ͨͩ͠ n 3 if(e1, e2, e3) br(e1, z.e2, z.e3)(nil) ͨͩ͠ z ৽ن rec(f) x.f( y.x(x)(y))( x.f( y.x(x)(y))) • 注釈 • let x = 1, y = 2 in e というように、複数定義も可能 • この場合は、λy.λx.e(2)(1) と等価 • rec(f)はZコンビネータ(不動点コンビネータ)
束縛変数と⾃由変数 • ラムダ抽象と、letrec式のみが束縛 • その他の変数は⾃由変数 7 x.E E
E தͷࣗ༝ม x Λଋറ letrec x = E1 in E2 E1, E2 தͷมΛଋറ
操作的意味論 • アクターコンフィグレーション • 各アクターの状態と、メッセージの集合 • アクターモデルの操作的意味論 • アクターコンフィグレーションからアクターコンフィグレーションへの 遷移について規定したもの
• ラベル付き状態遷移 8
アクターコンフィグレーション 9 ΞΫλʔίϯϑΟάϨʔγϣϯ ҎԼͷΑ͏ʹදه͞ΕΔɻ || µ ͨͩ͠ɺ ໊લ͖ΞΫλʔͷू߹Ͱ͋Γɺ µૹ৴தͷϝοηʔδͷू߹Ͱ͋Δɻ ΞΫλʔ໊͔ΒΞΫλʔࣜͷࣸ૾Ͱ͋Δɻ
͋ΔΞΫλʔ a ͷϝοηʔδ a v ͱදه͞ΕΔɻ ͜͜Ͱ v ϝοηʔδதʹؚ·ΕΔͰ͋Δɻ
アクターコンフィグレーションの例 10 a b 1 (メッセージ) 2つのアクターaとbが存在しており、 アクターaへ1というメッセージが配送中 [ࣜ1 ]a
, [ࣜ2 ]b || a 1
簡約コンテキスト 11 ͋ΔΞΫλʔࣜ e ҎԼͷΑ͏ʹදݱ͞ΕΔɻ e = R ӈลͷදݱΛ؆ίϯςΩετͱ͍͍ɺࣜ e
ͷ࣍ʹධՁ͞ΕΔࣜͰ͋Γɺ R ࣜ e தͷ ʹ૬͢Δ෦Λ Ͱஔ͖͑ͨͷͰ͋Δɻ ྫ send(new(e), 10) = send( , 10) new(e)
簡約可能な式と簡約コンテキストの構⽂ 12 Er ::= ؆Մೳͳࣜ V(V) ϥϜμద༻ | F(V, .
. . , V) ؔద༻ | br(V, E, E) ࣮݅ߦ | letrec X = V in E ࠶ؼఆٛ | send(V, V) ϝοηʔδૹ৴ | new(V) ΞΫλʔੜ | ready(V) ৼΔ͍มߋ R ::= ؆ίϯςΩετ Hole | pr(V, R) ϖΞίϯετϥΫλ | pr(R, E) ϖΞίϯετϥΫλ | V(R) ϥϜμద༻ | R(E) ϥϜμద༻ | F(V, . . . , V, R, E, . . . , E) ؔద༻ | br(R, E, E) ࣮݅ߦ | letrec X = R in E | send(V, R) ϝοηʔδૹ৴ | send(R, E) ϝοηʔδૹ৴ | new(R) ΞΫλʔੜ | ready(R) ৼΔ͍มߋ
拡張ラムダ計算の簡約規則 13 x.e(v) e{x/v} f(v1, . . . , vn)
v ͨͩ͠ɺ f F, v = [[f]](v1, . . . , v2) br(true, e, ) e br(false, , e) e 1st(pr(v, )) v 2nd(pr( , v)) v letrec x = v in e e{x/v{x/(letrec x = v in v)}}
操作的意味論 14 e e , [R e ]a || µ
[fun:a] , [R e ]a || µ , [R new(b) ]a || µ [new:a,a ] , [R a ]a, [ready(b)]a || µ ͨͩ͠ɺ a ৽ن , [R send(a , v) ] || µ [snd:a] , [R nil ]a || µ { a v } , [R ready(b) ]a || { a v } µ [rcv:a,v] , [b(v)]a || µ
簡約の例 15 a b 10 [ ready(e1) ]a, [seq( ,
ready(e2)) send(a, 10)) ]b || [snd:a] [ ready(e1) ]a, [seq( , ready(e2)) nil) ]b || a 10 [ ready(e1) ]a, [ ready(e2) ]b || a 10 [rcv:a,10] [ e1(10) ]a, [ ready(e2) ]b || (seqの箇所は⼀部省略)
計算⽊ (computation tree) 16 κ0 κ1 κ1ʼ κ2 κ2ʼ κ2ʼʼ
κ3 計算⽊の例 l1 ΛΞΫλʔίϯϑΟάϨʔγϣϯͱ͢Δͱ͖ɺܭࢉ ( ) ɺز͔ͭͷ n N ʹର͢Δɺશͯͷ ༗ݶϥϕϧ͖ભҠྻ [ i li+1 i+1 |i < n] ͷू߹Ͱ͋Δɻ͜͜Ͱɺ = 0 Ͱ͋Γɺ N ॱংू߹Ͱ͋Δɻ l1ʼ l2 l2ʼ l2ʼʼ l3 N = {0, 1, 1 , 2, 2 , 2 , 3} 0 < 1, 0 < 1 , 1 < 2, 1 < 2 , 1 < 2 , 2 < 3 ॱংू߹ͷԼʹఆٛ͞ΕΔྻΛܭࢉྻ (computation sequence ) ͱݺͼɺ શॱংू߹ͱʹఆٛ͞ΕΔྻΛܭࢉ࿏ (computation path) ͱݺͿɻ 計算列 計算路 ( ) ΛɺΞΫλʔίϯϑΟάϨʔγϣϯ ͔Β ౸ୡՄೳͳύεͷશू߹ͱදهɻ
公平性 17 ͋ΔભҠϥϕϧ l ͕༗ޮͰ͋ΔͨΊͷඞཁे݅ɺ l ͱͳΔ ͕ଘࡏ͢Δ͜ͱͰ͋Δɻ ͜͜Ͱɺ͋ΔભҠϥϕϧ [rcv
: a, v] ͕ӬଓతʹແޮԽ͞ΕΔͷɺ ΞΫλʔ a ͕ೋͱϝοηʔδͷड৴ঢ়ଶʹͳΒͳ͍ͱ͖Ͱ͋Δɻ ͋Δܭࢉ ( ) தͷɺ͋Δܭࢉ࿏ = [ i li+1 i+1 |i < ] ͕ެฏͰ͋Δͱɺ ͦΕͧΕͷ༗ޮͳભҠϥϕϧ͕࠷ऴతʹى͖Δɺ͘͠ӬଓతʹແޮԽ͞ΕΔͱ͖Ͱ͋Δɻ ( ) தͷશͯͷެฏͳܭࢉ࿏ͷू߹Λ F( ) ͱදهɻ
公平性の例 18 A セマフォ B acquire acquire A ok A
計算 セマフォ release A セマフォ acquire A ok time ・ ・ ・ Aしか実⾏できない公平でない計算路 (飢餓状態) A S B acquire acquire A ok 終了 計算 Aしか実⾏できないが公平な計算路 Sは永続的にメッセージを⾮受信状態に移⾏
例:排他実⾏ 19 sem = rec(λb.λh.λm. if(get?(m), if(h = nil, seq(send(cust(m),
true), ready(b(cust(m)))), seq(send(cust(m), false), ready(b(h))), if(release?(m), ready(b(nil)), ready(b(h))))) customer = rec(λb.λself.λs.λm. seq(if(m, seq(/* critical section */, send(s, mkrelease(self))), send(s, mkget(self))), ready(b(self)(s)))) // 補助関数 mkget = λh.pr(true, h) mkrelease = pr(false, nil) get? = λm.if(ispr?(m), 1st(m), false) release? = λm.if(ispr?(m), not(1st(m)), false) cust = λm.2nd(m) // 消費者が2⼈で実⾏する例 letrec s = new(sem(nil)), a = new(customer(a)(s)), b = new(customer(b)(s)) in seq(send(a, false), send(b, false))
EOF 20