【发布时间】:2020-05-11 09:59:24
【问题描述】:
根据我对持久性编程模型的理解,程序员需要正确区分易失性变量和持久性变量。持久变量将需要某种原子更新,以便在发生电源故障时,恢复程序可以将程序的数据清理到一致的状态。
例如,如果我将一个节点插入到具有持久内存支持程序的链表的开头,我必须执行以下操作:
- 创建包含新数据的新节点
- 将“next”指针链接到链表的当前头
- 然后更新头指针指向新节点。
必须使用 undo-log 或 redo-log 执行每个步骤,以帮助恢复程序保持数据的一致状态。此外,每个步骤都必须通过刷新和栅栏来持久化。
程序员想要确定哪些变量必须在失败中幸存下来,哪些不重要,以便它们不需要开销(“日志记录”和“刷新和围栏”)。这比听起来要困难得多,并且有很多关于它的研究和工具。
现在这是我的问题。假设我对持久性编程模型的理解是正确的,那么将所有易失性变量(例如循环计数器)视为持久性变量是否不正确?我知道这会导致大量开销,并被确定为“性能错误”。如果在任何情况下持久化 volatile 变量会影响恢复程序的正确性,我将不胜感激。
谢谢。
【问题讨论】: