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
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.4k
設計ナイト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
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
3
930
実用!Hono RPC2026
yodaka
2
320
Making the RBS Parser Faster
soutaro
0
720
SkillsをS3 Filesに置く時のあれこれ
watany
3
1.6k
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
350
GoogleCloudとterraform完全に理解した
terisuke
1
200
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
3.1k
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
150
🦞OpenClaw works with AWS
licux
1
360
AIと共に生きる技術選定 2026
sgash708
0
140
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
440
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
170
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
440
Evolving SEO for Evolving Search Engines
ryanjones
0
190
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
What's in a price? How to price your products and services
michaelherold
247
13k
Designing Powerful Visuals for Engaging Learning
tmiket
1
370
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
ラッコキーワード サービス紹介資料
rakko
1
3.3M
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.4k
Utilizing Notion as your number one productivity tool
mfonobong
4
300
Design in an AI World
tapps
1
210
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/