我正在考虑使用 TVar 在 Web 应用程序中存储一些状态(可以在重新启动时重新创建)。但是,我担心 TVar 的争用方面。似乎频繁的短时间运行的事务可以通过不断地中断较长的事务来饿死它们。此外,随着更多运行时间较长的事务不断重启,这将增加 CPU 的负载,从而进一步增加这些事务的长度。最终我觉得这可能会导致服务器完全没有响应。
考虑到这一点,我有以下问题:
(1) TVar(或其他数据类型)可以使用锁,而不是同时尝试/重试。
(2)TVar(或其他数据类型)能否有一些不同的争用机制,即“让事务在运行另一个事务之前运行一秒钟”,或者至少有一些保证事务最终会完成(即防止对运行时间更长的事务)。