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
concurrency programming with Akka
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shinpei Maruyama
August 09, 2014
Programming
580
2
Share
concurrency programming with Akka
Shinpei Maruyama
August 09, 2014
More Decks by Shinpei Maruyama
See All by Shinpei Maruyama
過去や未来を扱うのは難しい? 過去と未来に立ち向かうための勘所
shinpeim
3
4.3k
設計ナイト2022 トランザクションスクリプト
shinpeim
12
3.7k
Ruby (off|with) the Rails
shinpeim
20
5.3k
綱渡りバッチ脱出大作戦
shinpeim
3
3.9k
Building native apps with scala.js
shinpeim
2
1.5k
今あえてDRY原則に向き合う
shinpeim
51
560k
Nekogata Drum Sequencer written in Scala.js
shinpeim
2
4.1k
複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ
shinpeim
36
15k
Using Scala.js with the JavaScript ecosystems
shinpeim
0
2.4k
Other Decks in Programming
See All in Programming
KagglerがMixSeekを触ってみた
morim
0
360
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
310
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
750
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
180
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
430
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
240
OTP を自動で入力する裏技
megabitsenmzq
0
130
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
190
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
3
2.6k
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
180
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
Darren the Foodie - Storyboard
khoart
PRO
3
3.1k
The Limits of Empathy - UXLibs8
cassininazir
1
280
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Fireside Chat
paigeccino
42
3.9k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
4 Signs Your Business is Dying
shpigford
187
22k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
250
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Transcript
by しんぺい a.k.a. 猫型蓄音機 concurrency programming with Akka
で、誰? • 猫型蓄音機 とか しんぺいさんとか • お仕事では Ruby, Scala •
趣味でも Ruby, Scala • たまに Perl
第一部 並行処理とその課題
逐次処理と並行処理 • 逐次処理 • 実行順序が保証されている • 並行処理 • 実行順序が保証されていない
逐次処理
並行処理
並行処理
並行処理と並列処理 • 並行処理 • 同時に実行される処理は一個だけかもし れない(=CPUは一個かもしれない) • 並列処理 • 同時に複数の処理が実行される(=複数の
CPUが同時に処理を行っている)
例えば • CRuby1.8までは、複数スレッドを利 用してもCPUはひとつしか使ってい なかった(= 並行処理ではあるが並 列処理ではない) • 1.9からは複数CPUで計算するように なった(=
並行処理かつ並列処理)
並行処理の課題1 • 処理の順序が保証されない = どこ で誰がメモリのどの部分を触るかわ からない • 複数のスレッドで共有されるデータ に関してはロックなどの工夫が必要
• ロック獲得し忘れてデータこわしま した • デッドロックになってシステムが停 止しました • テストしにくすぎ問題 並行処理の課題1
並行処理の課題2 • 処理の順序が保証されないのでどこ で例外ハンドリングするかめっちゃ 悩む • 例外は一種の goto です
第二部 Actor Model
辛みをコントロールする Q: なんでロックが必要なの? A: ひとつのデータをみんなで触るか ら Q: じゃあそもそもデータ共有しな きゃよくない? A:
アッハイ
例えばDLのプログレスバー UIスレッド DLスレッド 進捗率 DLを依頼 content 共有
UIアクター DLアクター DLを依頼 進捗報告 進捗報告 進捗報告 進捗報告 content 例えばDLのプログレスバー
辛みをコントロールする • 非同期の例外ハンドリングめっちゃ 大変 • じゃあ、例外が起こったらリカバリ しないで壊しちゃえ、壊れたらもっ かい新しいアクター作ろう! • Let
it crash!!!!!!!!
Let it crash Actor A Actor B mail box mail
box send message
Let it crash Actor A Actor B mail box mail
box fetch message
Let it crash Actor A Actor B mail box mail
box process message
Let it crash Actor A Actor B mail box mail
box send messages
Let it crash Actor A Actor B mail box mail
box fetch and process messages
Let it crash Actor A Actor B mail box drunk
exception! mail box
Let it crash Actor A Actor B mail box インスタンスを破棄
mail box
Let it crash Actor A mail box mail box
Let it crash Actor A mail box mail box Actor
B インスタンス再作成
Let it crash Actor A Actor B mail box mail
box fetch and process messages
supervisor tree • Actorは(基本的には)Actorによっ て作られる • 作ったActorは作られたActorを監 視する。 • 監視の木構造が出来上がる
supervisor tree • 監視されてるActorで上がった例外は監 視してるActorが捕捉できる • デフォルトかつ典型的動きとしては、さっ き見たようにアクターを再起動する • その他に、止めちゃったり、さらに上の
監視者に丸投げしたりできる
第三部 Akka で Actor
Actor in Scala • Akka • 信頼と実績のTypesafe製 • JVM上で動く •
Java/Scalaで使えるよ • クラスタリングできるよ • 要するにJVMで動くErlang/OTPみたい なかんじ!
ライブコーディング & デモします
Akka vs Erlang • Akka • JVMの資産が使える • 文法がきもくない •
Erlang • ホットデプロイできる • ErlangVM 軽量プロセス
まとめ • データを共有するのが辛い => Actor モデルで shared nothing! • 例外のハンドリングが辛い
=> Actor モデルで let it crash!
さらなる学習へのポインタ • https://gist.github.com/ Shinpeim/ ef7ce82595cb96ef4aa6 • http://akka.io/