我发现 TVar 很容易使用,尽管 MVar 看起来更简单一些,而 TVar 更有特色。
所以我的问题很简单,我想去 MVar 而不是 TVar 的条件是什么?我想任何时候我不需要事务更新我都可以使用 MVar,但这对我有什么好处?
我发现 TVar 很容易使用,尽管 MVar 看起来更简单一些,而 TVar 更有特色。
所以我的问题很简单,我想去 MVar 而不是 TVar 的条件是什么?我想任何时候我不需要事务更新我都可以使用 MVar,但这对我有什么好处?
MVar
TVar
某些情况下更快电视柜
IORef
IO
写入/更新TVar
MVar
对于何时使用or并没有真正的硬性规定TVar
。如果我要保护的资源将永远“丢失”(而不是空的,考虑Nothing
vs Just mempty
),那么MVar
通常是最有意义的。如果我需要对资源执行原子修改块,那么TVar
是最合适的。
TVar 更安全但速度较慢。
MVar 可能会死锁,但效率要高得多。
更有效的仍然是IORef
and atomicModifyIORef
(CAS),但是你可以用它做什么受到了很大的限制。
这实际上是一种安全而不是性能的权衡。TVars是完全通用的,非常安全。其他一切都不那么重要,而且规模越来越小。