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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ytakano
February 02, 2018
Programming
630
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
230
π計算
ytakano
0
84
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
ytakano
0
190
リアクティブプログラミング
ytakano
0
670
MindYourPrivacy: Design and Implementation of a Visualization System for Third-Party Web Tracking - IEEE PST 2014
ytakano
0
540
SF-TAP: Scalable and Flexible Traffic Analysis Platform running on Commodity Hardware
ytakano
0
720
SF-TAP Tutorial Flow Abstractor ver.
ytakano
0
750
Survey of Transactional Memory
ytakano
0
880
CUDA Memo
ytakano
0
710
Other Decks in Programming
See All in Programming
3Dシーンの圧縮
fadis
1
730
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
680
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
150
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
2
1.2k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
3.6k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
AI時代のUIはどこへ行く?その2!
yusukebe
21
7k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
6
4k
Contextとはなにか
chiroruxx
1
290
Webフレームワークの ベンチマークについて
yusukebe
0
160
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Navigating Weather and Climate Data
rabernat
0
220
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
A better future with KSS
kneath
240
18k
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