线性化和可序列化(在Java中)有什么区别?您能否举例说明它们之间的区别或提供引用?
最佳答案
两者的主要区别在于可序列化是全局属性;整个操作/交易历史的属性。 线性化是本地属性;单个操作/交易的属性。另一个区别是线性化性包括实时的概念,而串行化性则不这样:操作的线性化点必须位于其调用和响应时间之间。 (请参阅Tim Harris:事务性存储器,第2版。请参见Herlihy的幻灯片,来自“多处理器编程的艺术”,有关线性化的部分,其文件名为available here,以获取一些示例和证明。
这两个属性的目标是相同的:顺序一致性。从Herlihy的论文中:
引用文献:
http://www.cs.brown.edu/~mph/HerlihyW90/p463-herlihy.pdf
更多细节:
如果您真的对此很在意,请阅读介绍定义的论文。对于线性化,这是Linearizability: A Correctness Condition for Concurrent Objects, Herlihy and Wing。它很密集,但值得关注。请注意,在软件事务存储社区中,线性化是否是正确的目标/属性是一个悬而未决的问题。
可序列化性是关于一组操作/“系统”的结果的结果,该“系统”可表示为所有操作的特定顺序(“好像是按照特定顺序执行...”)。线性化是系统中操作的单个子集的属性...如果一个操作/一组操作在其他操作中看起来像是相对于其他操作在(逻辑)时间的特定时刻出现,则它们是可线性化的。规范的文件是Papadimitriou, The Serializability of Concurrent Database Updates。
在考虑“线性化”时,请考虑“原子操作”。当一组(一组)操作(似乎)相对于系统的其他部分以原子方式发生时,它们是可线性化的。一个常见的表述是“给人一种错觉,即每个操作在调用和响应之间即刻生效。” 线性化性的表述归因于Herlihy,它强调了这是局部属性,而不是全局的其他类型的顺序一致性属性,例如“可序列化”。