Clojureを勉強している4

状態とコンカレンシーの話。

  • atom出てきた。
    • reset!で再セットか
    • swap!
      • 別のスレッドで使ってる場合はリトライされるのか。
      • 例ではfutureで別スレッドを用意
      • printlnみたいな副作用を含む関数などを差し挟むと当然同じ出力が発生する
      • しかし、atomは想定通りに更新される。かくしてswap!は副作用がないってわけか。
  • 次はrefs。
    • ClojureはSTM付いてるのか。えらい
    • alterもリトライする
    • atom/swap!ref/alterがそれぞれ対応してるのか
    • commuteはリトライしないとな。DBとか扱うときはこれになるんかな
    • ref-set便利だな。
  • 次はagents。非同期。

    • agent/sendがまた対応してると。
    • send-offはI/O-blockingの可能性があるときに使用するのか
    • 失敗した時restart-agentでリセットすることもできる
    • set-error-mode!set-error-handler!であらかじめ失敗した時の処理を定めておいても良いと。
  • Atom は 同期 で Uncoordinated

  • Ref は 同期 で Coordinated
  • Agent は 非同期 で Uncoordinated

  • Chapter 3 State and Concurrency

    • Handling Real-World State and Concurrency

Living Clojure