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
Shinpei Maruyama
August 09, 2014
Programming
2
550
concurrency programming with Akka
Shinpei Maruyama
August 09, 2014
Tweet
Share
More Decks by Shinpei Maruyama
See All by Shinpei Maruyama
過去や未来を扱うのは難しい? 過去と未来に立ち向かうための勘所
shinpeim
3
4.1k
設計ナイト2022 トランザクションスクリプト
shinpeim
12
3.6k
Ruby (off|with) the Rails
shinpeim
20
5.2k
綱渡りバッチ脱出大作戦
shinpeim
3
3.8k
Building native apps with scala.js
shinpeim
2
1.4k
今あえてDRY原則に向き合う
shinpeim
51
560k
Nekogata Drum Sequencer written in Scala.js
shinpeim
2
4k
複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ
shinpeim
36
15k
Using Scala.js with the JavaScript ecosystems
shinpeim
0
2.4k
Other Decks in Programming
See All in Programming
jakarta-security-jjug-ccc-2025-fall
tnagao7
0
100
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
150
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
480
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
AI駆動開発ライフサイクル(AI-DLC)のホワイトペーパーを解説
swxhariu5
0
1.6k
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
110
[SF Ruby Conf 2025] Rails X
palkan
0
370
Herb to ReActionView: A New Foundation for the View Layer @ San Francisco Ruby Conference 2025
marcoroth
0
200
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
2.4k
Level up your Gemini CLI - D&D Style!
palladius
1
130
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
4
820
JEP 496 と JEP 497 から学ぶ耐量子計算機暗号入門 / Learning Post-Quantum Crypto Basics from JEP 496 & 497
mackey0225
2
500
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Agile that works and the tools we love
rasmusluckow
331
21k
A designer walks into a library…
pauljervisheath
210
24k
Statistics for Hackers
jakevdp
799
230k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Docker and Python
trallard
46
3.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How to Ace a Technical Interview
jacobian
280
24k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Thoughts on Productivity
jonyablonski
73
4.9k
Designing for humans not robots
tammielis
254
26k
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/