我发现TVar很容易使用,即使MVar看起来更简单一些,而TVar更有特色。
所以我的问题很简单,我想要什么条件去MVar而不是TVar?我想任何时候我都不需要交易更新我可以使用MVar,但这对我有什么好处?
答案 0 :(得分:33)
TVars更安全但更慢。
MVars可以死锁,但效率更高。
效率更高仍然是IORef
和atomicModifyIORef
(CAS),但是你可以用它做的事情受到严格限制。
这实际上是对性能权衡的安全性。 TVars非常通用,非常安全。其他一切都不那么重要了。
答案 1 :(得分:33)
<强> MVAR 强>
TVar
更快<强>的TVar 强>
<强> IOREF 强>
IO
写入/更新TVar
何时使用MVar
或TVar
并没有真正的硬性规则。
如果我正在守卫的资源将“缺失”(而不是空,请考虑Nothing
vs Just mempty
),那么MVar
通常最有意义。如果我需要对资源执行原子块修改,那么TVar
是最合适的。