【Crystal】Concurrency

 【Crystal】Concurrency

crystal.tokyo #7 での発表資料です。
https://crystal.connpass.com/event/93629/

3d1621a44968b7b2f7cf8907b3a3645b?s=128

at_grandpa

July 18, 2018
Tweet

Transcript

  1. 6.
  2. 10.
  3. 14.

    2018-07-18 08:12:50 +09:00 start 2018-07-18 08:12:50 +09:00 [fiber 1] start

    2018-07-18 08:12:50 +09:00 [fiber 2] start 2018-07-18 08:12:55 +09:00 [top level] value: send from fiber 1 2018-07-18 08:12:55 +09:00 [fiber 1] end 2018-07-18 08:13:00 +09:00 [top level] value: send from fiber 2 2018-07-18 08:13:00 +09:00 end
  4. 15.

    2018-07-18 08:12:50 +09:00 start 2018-07-18 08:12:50 +09:00 [fiber 1] start

    2018-07-18 08:12:50 +09:00 [fiber 2] start 2018-07-18 08:12:55 +09:00 [top level] value: send from fiber 1 2018-07-18 08:12:55 +09:00 [fiber 1] end 2018-07-18 08:13:00 +09:00 [top level] value: send from fiber 2 2018-07-18 08:13:00 +09:00 end ・並行に動いている ・値も取れている
  5. 17.

    ✔ Fiber
 ✔ Runtime Scheduler
 ✔ Event Loop ✔ Channel


    ✔ IO::Syscall Concurrencyを理解するポイント
  6. 18.

    Fiber ✔ Process ⊃ Thread ⊃ Fiber
 ✔ 協調マルチタスク
  -

    Fiber自ら、処理を他のFiberに委譲する  - 1つのFiberが固まるとシステム全体が固まる
 ✔ Crystalの処理は全てFiberで行われている
  - 「Main Fiber」でメインの処理を実行している
  7. 21.

    Channel ✔ Fiber間のデータのやりとり
 ✔ 送信元Fiberや受信先Fiberを保持  - @senders = Deque(Fiber).new
  -

    @receivers = Deque(Fiber).new ✔ 送受信時にFiberを切り替え
  - Runtime Scheduler を使う
  8. 24.
  9. 32.
  10. 55.

    ・そのまま終了 ・ここは通らない 2018-07-18 08:12:50 +09:00 start 2018-07-18 08:12:50 +09:00 [fiber

    1] start 2018-07-18 08:12:50 +09:00 [fiber 2] start 2018-07-18 08:12:55 +09:00 [top level] value: send from fiber 1 2018-07-18 08:12:55 +09:00 [fiber 1] end 2018-07-18 08:13:00 +09:00 [top level] value: send from fiber 2 2018-07-18 08:13:00 +09:00 end [fiber 2] end は表示されてない
  11. 56.
  12. 57.

    とはいえ ✔ Concurrencyに必要な役者を知る
  - Fiber, Runtime Scheduler, Event loop, Channel


    ✔ Fiberが切り替わるタイミングを知る
  - I/Oの場合
   - 実行可能Fiber-queueからshift
  - receiveの場合
   - 実行可能Fiber-queueからshift
   - sendしたFiberをqueueにenqueue
  - sendの場合
   - receiveしたFiberに切り替え これらを知るだけで、だいぶ変わる
  13. 58.