Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Futureのおまじないを理解する(LT)

285 views

Published on

ScalaのFutureを実行する際に、importするscala.concurrent.ExecutionContext.Implicits.global
がなぜ必要なのかをライブラリのコードを読みながら説明してみました

Published in: Engineering
  • Be the first to comment

Futureのおまじないを理解する(LT)

  1. 1. Futureのおまじないを理解する Hideaki Tarumi 2017/12/04
  2. 2. 自己紹介 • 名前: Hideaki Tarumi • Twitter ID: hideA88 • 出身: 広島市 • Scala歴: 2年くらい • 所属: 株式会社エフ・コード(2016/9に転職) ➡ 前職ではSIer的な仕事をしていました(Java, JavaScript)
  3. 3. 今日のテーマ • FutureのExecutionContextについて
  4. 4. ScalaのFutureのサンプルコード こいつはなにもの?
  5. 5. 公式ドキュメントより 「実行コンテキストは渡されたタスクを実行し、スレッドプールのようなも のだと考えていい。これらは、非同期計算がいつどのように実行されるか を取り扱うため、futureメソッドには欠かせないものだ。」 出典『https://docs.scala-lang.org/ja/overviews/core/futures.html』
  6. 6. いや、別に渡してないんですけど
  7. 7. どうやって渡しているのか 実際のライブラリの中身を見ていきたいと思います (Scala 2.11.xのコードです)
  8. 8. ScalaのFutureのサンプルコード applyメソッドが呼ばれる
  9. 9. Scala API Docsより
  10. 10. ExecutionContext.Implicits.globalのコード importすることで暗黙パラメータ解決のスコープに入ってくる
  11. 11. 必要な理由はわかった だけどなんでいるの?
  12. 12. Future.applyの内部実装 なにか見覚えのある。。。 渡されてる!! ここでbodyが評価される
  13. 13. まとめ 1. ExecutionContextに対してRunnableをmixinしているクラスのインスタ ンスをつくり、ExecutionContextに渡すことで非同期に実行されてい る 2. Future#applyのメソッドに渡す引数としてExecutionContextをimplicit の解決スコープに入れるために、ExecutionContext.Implicits.globalを importする 3. おまじないに見えるところも、一つずつ丁寧に紐解いていくとそんな に難しくない
  14. 14. (補足)なぜ2.12.xじゃないの? • 2.12.0でFutureについて大幅に実装が変わっています • その結果実装が複雑になっており、今回時間が足りないため2.11.xを題 材にしました • Runnableインターフェースを実装したインスタンスをExecutionContextに 渡しているのは同じなので、気になる人は是非コードを追ってみるとい いと思います
  15. 15. ご清聴ありがとうございました

×