Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【Crystal】Concurrency

 【Crystal】Concurrency

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

at_grandpa

July 18, 2018
Tweet

More Decks by at_grandpa

Other Decks in Technology

Transcript

  1. 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
  2. 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 ・並行に動いている ・値も取れている
  3. ✔ Fiber
 ✔ Runtime Scheduler
 ✔ Event Loop ✔ Channel


    ✔ IO::Syscall Concurrencyを理解するポイント
  4. Fiber ✔ Process ⊃ Thread ⊃ Fiber
 ✔ 協調マルチタスク
  -

    Fiber自ら、処理を他のFiberに委譲する  - 1つのFiberが固まるとシステム全体が固まる
 ✔ Crystalの処理は全てFiberで行われている
  - 「Main Fiber」でメインの処理を実行している
  5. Channel ✔ Fiber間のデータのやりとり
 ✔ 送信元Fiberや受信先Fiberを保持  - @senders = Deque(Fiber).new
  -

    @receivers = Deque(Fiber).new ✔ 送受信時にFiberを切り替え
  - Runtime Scheduler を使う
  6. ・そのまま終了 ・ここは通らない 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 は表示されてない
  7. とはいえ ✔ Concurrencyに必要な役者を知る
  - Fiber, Runtime Scheduler, Event loop, Channel


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