MVar は少しシンプルに見えますが、TVar はもう少し機能が豊富ですが、TVar は非常に使いやすいと思います。
だから私の質問は非常に単純です.TVarではなくMVarに行きたいのはどのような条件ですか? トランザクションの更新が必要ないときはいつでもMVar を使用できると思いますが、それはどのようなメリットがありますか?
MVar は少しシンプルに見えますが、TVar はもう少し機能が豊富ですが、TVar は非常に使いやすいと思います。
だから私の質問は非常に単純です.TVarではなくMVarに行きたいのはどのような条件ですか? トランザクションの更新が必要ないときはいつでもMVar を使用できると思いますが、それはどのようなメリットがありますか?
MVar
TVar
場合によってはより速くなる可能性がありますTVar
IORef
IO
破壊的な書き込み/更新によく使用されるTVar
MVar
または をいつ使用するかについて、厳格なルールはありませんTVar
。私が保護しているリソースが「行方不明」になる場合 (空ではなく、Nothing
vsを考慮してくださいJust mempty
) は、MVar
多くの場合最も理にかなっています。リソースへの変更のアトミック ブロックを実行する必要がある場合は、TVar
最適です。
TVar はより安全ですが、速度は遅くなります。
MVar はデッドロックする可能性がありますが、はるかに効率的です。
より効率的なのはIORef
and atomicModifyIORef
(CAS) ですが、それでできることは非常に限られています。
これは、実際には安全性とパフォーマンスのトレードオフです。TVar は完全に一般的で、非常に安全です。他のすべてはそうではなく、減少しています。