Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アクターモデル
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
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
3.9k
ALB ログから Trace を気合で繋げる技術
fohte
7
880
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
500
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
230
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
200
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
160
Foundry Localでエージェント開発
seosoft
0
170
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Balancing Empowerment & Direction
lara
6
1.3k
The Invisible Side of Design
smashingmag
301
52k
Amusing Abliteration
ianozsvald
1
290
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Mobile First: as difficult as doing things right
swwweet
225
10k
30 Presentation Tips
portentint
PRO
1
390
How to Ace a Technical Interview
jacobian
281
24k
Everyday Curiosity
cassininazir
0
310
Optimising Largest Contentful Paint
csswizardry
37
3.9k
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