concurrency programming with Akka

concurrency programming with Akka

6521324f6ab5266cdcde1dd05945a27b?s=128

Shinpei Maruyama

August 09, 2014
Tweet

Transcript

  1. by しんぺい a.k.a. 猫型蓄音機 concurrency programming with Akka

  2. で、誰? • 猫型蓄音機 とか しんぺいさんとか • お仕事では Ruby, Scala •

    趣味でも Ruby, Scala • たまに Perl
  3. 第一部 並行処理とその課題

  4. 逐次処理と並行処理 • 逐次処理 • 実行順序が保証されている • 並行処理 • 実行順序が保証されていない

  5. 逐次処理

  6. 並行処理

  7. 並行処理

  8. 並行処理と並列処理 • 並行処理 • 同時に実行される処理は一個だけかもし れない(=CPUは一個かもしれない) • 並列処理 • 同時に複数の処理が実行される(=複数の

    CPUが同時に処理を行っている)
  9. 例えば • CRuby1.8までは、複数スレッドを利 用してもCPUはひとつしか使ってい なかった(= 並行処理ではあるが並 列処理ではない) • 1.9からは複数CPUで計算するように なった(=

    並行処理かつ並列処理)
  10. 並行処理の課題1 • 処理の順序が保証されない = どこ で誰がメモリのどの部分を触るかわ からない • 複数のスレッドで共有されるデータ に関してはロックなどの工夫が必要

  11. • ロック獲得し忘れてデータこわしま した • デッドロックになってシステムが停 止しました • テストしにくすぎ問題 並行処理の課題1

  12. 並行処理の課題2 • 処理の順序が保証されないのでどこ で例外ハンドリングするかめっちゃ 悩む • 例外は一種の goto です

  13. 第二部 Actor Model

  14. 辛みをコントロールする Q: なんでロックが必要なの? A: ひとつのデータをみんなで触るか ら Q: じゃあそもそもデータ共有しな きゃよくない? A:

    アッハイ
  15. 例えばDLのプログレスバー UIスレッド DLスレッド 進捗率 DLを依頼 content 共有

  16. UIアクター DLアクター DLを依頼 進捗報告 進捗報告 進捗報告 進捗報告 content 例えばDLのプログレスバー

  17. 辛みをコントロールする • 非同期の例外ハンドリングめっちゃ 大変 • じゃあ、例外が起こったらリカバリ しないで壊しちゃえ、壊れたらもっ かい新しいアクター作ろう! • Let

    it crash!!!!!!!!
  18. Let it crash Actor A Actor B mail box mail

    box send message
  19. Let it crash Actor A Actor B mail box mail

    box fetch message
  20. Let it crash Actor A Actor B mail box mail

    box process message
  21. Let it crash Actor A Actor B mail box mail

    box send messages
  22. Let it crash Actor A Actor B mail box mail

    box fetch and process messages
  23. Let it crash Actor A Actor B mail box drunk

    exception! mail box
  24. Let it crash Actor A Actor B mail box インスタンスを破棄

    mail box
  25. Let it crash Actor A mail box mail box

  26. Let it crash Actor A mail box mail box Actor

    B インスタンス再作成
  27. Let it crash Actor A Actor B mail box mail

    box fetch and process messages
  28. supervisor tree • Actorは(基本的には)Actorによっ て作られる • 作ったActorは作られたActorを監 視する。 • 監視の木構造が出来上がる

  29. supervisor tree • 監視されてるActorで上がった例外は監 視してるActorが捕捉できる • デフォルトかつ典型的動きとしては、さっ き見たようにアクターを再起動する • その他に、止めちゃったり、さらに上の

    監視者に丸投げしたりできる
  30. 第三部 Akka で Actor

  31. Actor in Scala • Akka • 信頼と実績のTypesafe製 • JVM上で動く •

    Java/Scalaで使えるよ • クラスタリングできるよ • 要するにJVMで動くErlang/OTPみたい なかんじ!
  32. ライブコーディング & デモします

  33. Akka vs Erlang • Akka • JVMの資産が使える • 文法がきもくない •

    Erlang • ホットデプロイできる • ErlangVM 軽量プロセス
  34. まとめ • データを共有するのが辛い => Actor モデルで shared nothing! • 例外のハンドリングが辛い

    => Actor モデルで let it crash!
  35. さらなる学習へのポインタ • https://gist.github.com/ Shinpeim/ ef7ce82595cb96ef4aa6 • http://akka.io/