我发现TVar很容易使用,尽管MVar看起来更简单,而TVar则更有特色。
所以我的问题很简单,在什么情况下我想转到MVar而不是TVar?我想只要我不需要事务性更新,我就可以使用MVar,但是这对我有什么好处呢?
发布于 2013-03-16 03:00:34
TVars更安全,但速度更慢。
MVars可能会死锁,但效率要高得多。
效率更高的仍然是IORef和atomicModifyIORef (CAS),但这在很大程度上限制了您对它的使用。
这确实是一种安全与性能的权衡。TVars是完全通用的,非常安全。其他一切都变得不那么重要了,规模越来越小。
发布于 2013-03-16 03:06:11
MVar
TVar更快TVar
线程之间的空闲内存can not be read/write
IORef
用于破坏性writes/updates
IO,但复杂的事务逻辑更适合于对于何时使用MVar或TVar,并没有硬性规定。如果我保护的资源将“丢失”(而不是空的,请考虑Nothing与Just mempty),那么MVar通常是最有意义的。如果我需要对资源执行原子块修改,那么TVar是最合适的。
https://stackoverflow.com/questions/15439966
复制相似问题