Haskell STM : 如何使用 Haskell 实现无障碍 STM?
Haskell STM : How to implement Obstruction Free STM using Haskell?
我想使用 Haskell 来实施无障碍 STM (OFTM) 以对各种可用的争用管理策略进行基准测试。 例如,事务 T1 获取 Tvar,比如说X 尚未提交。现在另一个事务 T2 想要访问 X。在 Haskell STM 中,T2 被阻止并稍后重试。我希望事务将以非阻塞方式执行,其中 T2 将中止 T1 或 通过咨询争用管理器 后退任意时间。 T1 稍后会重试。正如在 Aggressive contention manager 的情况下发生的那样,它总是选择在冲突时间中止敌对事务。
这只是我想做的一个实验。
提前致谢。
首先:默认的 STM 实现不会 "block" 冲突事务。相反,每个事务都全速运行,并且仅在提交阶段检测到冲突。当事务尝试提交时,它要么成功,要么中止并且立即重新启动事务。它在任何时候都没有 "block"。 (您可能正在考虑 retry
原语,它 确实 阻止交易。)
其次:The Monad Reader(不,我不记得是哪个数字)的问题描述了 STM 的实现,其中交易冲突立即回滚冲突事务之一(哪一个取决于时间)。你可能会觉得很有趣。 (另一方面,代码无法访问,所以...)
编辑:issue 15(最后一节)。
我想使用 Haskell 来实施无障碍 STM (OFTM) 以对各种可用的争用管理策略进行基准测试。 例如,事务 T1 获取 Tvar,比如说X 尚未提交。现在另一个事务 T2 想要访问 X。在 Haskell STM 中,T2 被阻止并稍后重试。我希望事务将以非阻塞方式执行,其中 T2 将中止 T1 或 通过咨询争用管理器 后退任意时间。 T1 稍后会重试。正如在 Aggressive contention manager 的情况下发生的那样,它总是选择在冲突时间中止敌对事务。 这只是我想做的一个实验。 提前致谢。
首先:默认的 STM 实现不会 "block" 冲突事务。相反,每个事务都全速运行,并且仅在提交阶段检测到冲突。当事务尝试提交时,它要么成功,要么中止并且立即重新启动事务。它在任何时候都没有 "block"。 (您可能正在考虑 retry
原语,它 确实 阻止交易。)
其次:The Monad Reader(不,我不记得是哪个数字)的问题描述了 STM 的实现,其中交易冲突立即回滚冲突事务之一(哪一个取决于时间)。你可能会觉得很有趣。 (另一方面,代码无法访问,所以...)
编辑:issue 15(最后一节)。