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