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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
260
π計算
ytakano
0
94
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
570
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
910
CUDA Memo
ytakano
0
720
Other Decks in Programming
See All in Programming
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
JIS keyboard support in Omarchy
lef237
0
120
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
610
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
620
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
Jetpack Compose Mechanisms
skydoves
3
820
ChromeでローカルLLM
ryu1013
0
140
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Writing Fast Ruby
sferik
630
63k
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
The World Runs on Bad Software
bkeepers
PRO
72
12k
A Soul's Torment
seathinner
8
3.8k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Building Flexible Design Systems
yeseniaperezcruz
330
41k
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