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.7k
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
Go言語はstack overflowの夢を見るか?
logica0419
0
670
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
440
퇴근 후 1억이 거래되는 서비스 만들기 | 내가 AI를 사용하는 방법
maryang
2
230
釣り地図SNSにおける有料機能の実装
nokonoko1203
0
200
Ktorで簡単AIアプリケーション
tsukakei
0
120
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.3k
Module Proxyのマニアックな話 / Niche Topics in Module Proxy
kuro_kurorrr
0
480
Swift Concurrency 年表クイズ
omochi
3
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
450
contribution to astral-sh/uv
shunsock
0
570
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
720
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
Featured
See All Featured
KATA
mclloyd
PRO
32
15k
The Cost Of JavaScript in 2023
addyosmani
55
9.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Agile that works and the tools we love
rasmusluckow
331
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
A better future with KSS
kneath
239
18k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Invisible Side of Design
smashingmag
302
51k
Site-Speed That Sticks
csswizardry
13
940
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/