首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时/为什么在TVar上使用MVar

何时/为什么在TVar上使用MVar
EN

Stack Overflow用户
提问于 2013-03-16 02:45:26
回答 2查看 6.9K关注 0票数 39

我发现TVar很容易使用,尽管MVar看起来更简单,而TVar则更有特色。

所以我的问题很简单,在什么情况下我想转到MVar而不是TVar?我想只要我不需要事务性更新,我就可以使用MVar,但是这对我有什么好处呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-16 03:00:34

TVars更安全,但速度更慢。

MVars可能会死锁,但效率要高得多。

效率更高的仍然是IORefatomicModifyIORef (CAS),但这在很大程度上限制了您对它的使用。

这确实是一种安全与性能的权衡。TVars是完全通用的,非常安全。其他一切都变得不那么重要了,规模越来越小。

票数 41
EN

Stack Overflow用户

发布于 2013-03-16 03:06:11

MVar

  • 可以为空
  • 用于实现线程之间的同步模式
  • 允许线程之间的单向通信
  • 在某些情况下可能比TVar更快

TVar

线程之间的空闲内存can not be read/write

  • access
  • from“;例如,可用于实现查找缓存,多个线程可以从该缓存提交操作日志中的操作数量的线性时间
  • 如果存在许多较短的事务,则长时间运行的事务容易出现资源匮乏,从而阻止它们提交事务

IORef

用于破坏性writes/updates

  • has原子CAS操作的
  • 可变指针式IO,但复杂的事务逻辑更适合于

对于何时使用MVarTVar,并没有硬性规定。如果我保护的资源将“丢失”(而不是空的,请考虑NothingJust mempty),那么MVar通常是最有意义的。如果我需要对资源执行原子块修改,那么TVar是最合适的。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15439966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档