簡體   English   中英

何時/為什么在TVar上使用MVar

[英]When/why use an MVar over a TVar

我覺得TVar很容易使用,即使MVar看起來更簡單一些,而TVar更有特色。

所以我的問題很簡單,我想要什么條件去MVar而不是TVar? 我想任何時候我都不需要事務更新我可以使用一個MVar,但這對我有什么好處?

無功

  • 可以是空的
  • 用於實現線程之間的同步模式
  • 允許線程之間的單向通信
  • 在某些情況下,可能比TVar更快

的TVar

  • 不能為空
  • 原子交易
  • 線程之間的“共享內存”; 例如,可以用於實現多個線程可以讀/寫的查找緩存
  • access是事務日志中操作數的線性時間
  • 如果存在許多較短的事務,則長時間運行的事務很容易受到飢餓,從而阻止它們成功提交

IOREF

  • 可變指針式引用
  • 通常用於破壞性IO寫入/更新
  • 具有原子CAS操作,但復雜的事務邏輯更適合於TVar

什么時候使用MVarTVar並沒有真正的硬性規則。 如果我正在守衛的資源將“失蹤”(而不是空,請考慮Nothing vs Just mempty ),那么MVar通常是最有意義的。 如果我需要對資源執行原子塊修改,那么TVar是最合適的。

電視更安全但速度更慢。

MVars可以死鎖,但效率更高。

更高效的仍然是IORefatomicModifyIORef (CAS),但是你可以用它來做很多限制。

這實際上是對性能權衡的安全性。 TVars非常通用,非常安全。 其他一切都不那么嚴重,規模越來越小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM