Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
by しんぺい a.k.a. 猫型蓄音機 concurrency programming with Akka
Slide 2
Slide 2 text
で、誰? • 猫型蓄音機 とか しんぺいさんとか • お仕事では Ruby, Scala • 趣味でも Ruby, Scala • たまに Perl
Slide 3
Slide 3 text
第一部 並行処理とその課題
Slide 4
Slide 4 text
逐次処理と並行処理 • 逐次処理 • 実行順序が保証されている • 並行処理 • 実行順序が保証されていない
Slide 5
Slide 5 text
逐次処理
Slide 6
Slide 6 text
並行処理
Slide 7
Slide 7 text
並行処理
Slide 8
Slide 8 text
並行処理と並列処理 • 並行処理 • 同時に実行される処理は一個だけかもし れない(=CPUは一個かもしれない) • 並列処理 • 同時に複数の処理が実行される(=複数の CPUが同時に処理を行っている)
Slide 9
Slide 9 text
例えば • CRuby1.8までは、複数スレッドを利 用してもCPUはひとつしか使ってい なかった(= 並行処理ではあるが並 列処理ではない) • 1.9からは複数CPUで計算するように なった(= 並行処理かつ並列処理)
Slide 10
Slide 10 text
並行処理の課題1 • 処理の順序が保証されない = どこ で誰がメモリのどの部分を触るかわ からない • 複数のスレッドで共有されるデータ に関してはロックなどの工夫が必要
Slide 11
Slide 11 text
• ロック獲得し忘れてデータこわしま した • デッドロックになってシステムが停 止しました • テストしにくすぎ問題 並行処理の課題1
Slide 12
Slide 12 text
並行処理の課題2 • 処理の順序が保証されないのでどこ で例外ハンドリングするかめっちゃ 悩む • 例外は一種の goto です
Slide 13
Slide 13 text
第二部 Actor Model
Slide 14
Slide 14 text
辛みをコントロールする Q: なんでロックが必要なの? A: ひとつのデータをみんなで触るか ら Q: じゃあそもそもデータ共有しな きゃよくない? A: アッハイ
Slide 15
Slide 15 text
例えばDLのプログレスバー UIスレッド DLスレッド 進捗率 DLを依頼 content 共有
Slide 16
Slide 16 text
UIアクター DLアクター DLを依頼 進捗報告 進捗報告 進捗報告 進捗報告 content 例えばDLのプログレスバー
Slide 17
Slide 17 text
辛みをコントロールする • 非同期の例外ハンドリングめっちゃ 大変 • じゃあ、例外が起こったらリカバリ しないで壊しちゃえ、壊れたらもっ かい新しいアクター作ろう! • Let it crash!!!!!!!!
Slide 18
Slide 18 text
Let it crash Actor A Actor B mail box mail box send message
Slide 19
Slide 19 text
Let it crash Actor A Actor B mail box mail box fetch message
Slide 20
Slide 20 text
Let it crash Actor A Actor B mail box mail box process message
Slide 21
Slide 21 text
Let it crash Actor A Actor B mail box mail box send messages
Slide 22
Slide 22 text
Let it crash Actor A Actor B mail box mail box fetch and process messages
Slide 23
Slide 23 text
Let it crash Actor A Actor B mail box drunk exception! mail box
Slide 24
Slide 24 text
Let it crash Actor A Actor B mail box インスタンスを破棄 mail box
Slide 25
Slide 25 text
Let it crash Actor A mail box mail box
Slide 26
Slide 26 text
Let it crash Actor A mail box mail box Actor B インスタンス再作成
Slide 27
Slide 27 text
Let it crash Actor A Actor B mail box mail box fetch and process messages
Slide 28
Slide 28 text
supervisor tree • Actorは(基本的には)Actorによっ て作られる • 作ったActorは作られたActorを監 視する。 • 監視の木構造が出来上がる
Slide 29
Slide 29 text
supervisor tree • 監視されてるActorで上がった例外は監 視してるActorが捕捉できる • デフォルトかつ典型的動きとしては、さっ き見たようにアクターを再起動する • その他に、止めちゃったり、さらに上の 監視者に丸投げしたりできる
Slide 30
Slide 30 text
第三部 Akka で Actor
Slide 31
Slide 31 text
Actor in Scala • Akka • 信頼と実績のTypesafe製 • JVM上で動く • Java/Scalaで使えるよ • クラスタリングできるよ • 要するにJVMで動くErlang/OTPみたい なかんじ!
Slide 32
Slide 32 text
ライブコーディング & デモします
Slide 33
Slide 33 text
Akka vs Erlang • Akka • JVMの資産が使える • 文法がきもくない • Erlang • ホットデプロイできる • ErlangVM 軽量プロセス
Slide 34
Slide 34 text
まとめ • データを共有するのが辛い => Actor モデルで shared nothing! • 例外のハンドリングが辛い => Actor モデルで let it crash!
Slide 35
Slide 35 text
さらなる学習へのポインタ • https://gist.github.com/ Shinpeim/ ef7ce82595cb96ef4aa6 • http://akka.io/