#AihuaRead
摘录自《计算机程序的构造和解释》的“并发:时间是一个本质问题”一章,这段真的是让我爱不释手,对于理解世界、比特币都会很有帮助:
——
共享变量的各方面问题也出现在大型的分布式系统里。
例如,设想一个分布式的银行系统,其中的各个分支银行维护着银行余额的局部值,并且周期性地将这些值与其他分支所维护的值相互比较。在这样的系统里,“账户余额”的值可能是不确定的,除非刚刚做完了一次同步。
如果Peter在他与Paul共用的一个账户里存入了一些钱,什么时候才能说这个账户的余额已经改变了——是在本地的分支银行修改了余额之后,还是在同步之后?进一步说,如果Paul从另一分支银行访问这个账户,如何在这一银行系统里对这种行为的“正确性”确定合理的约束?
在这里,能考虑的可能就是保持Peter和Paul的各自行为,以及保证刚刚完成同步时刻的账户“状态”的正确性。有关“真正”的账户余额或者几次同步之间事件发生的顺序,可能就是完全无关紧要,而且也没有意义的。
注解:这观点看起来有些怪,但确实存在采用这种方式的系统。例如,信用卡账户的跨国付款通常采用按国家结清的方式,在不同国家的付款则采用周期性平账的方式。这样,一个账户在不同国家里的余额就完全可能不同。
这里的基本现象是不同进程之间的同步,建立起共享状态,或迫使进程之间通信所产生的事件按照某种特定的顺序进行。从本质上看,在并发控制中,任何时间概念都必然与通信有内在的密切联系。
注解:对于分布式系统而言,这种看法由Lamport提出(1978),他说明了如何通过通信建立一种“全局时钟”,通过它就可以在分布式系统里建立起事件之间的秩序。
有意思的是,时间与通信之间的这种联系也出现在相对论里,在那里的光速(可能用于同步事件的最快信号)是与时间和空间有关的基本常量。在处理时间和状态时,我们在计算模型领域所遭遇的复杂性,事实上,可能就是物理世界中最基本的复杂性的一种反映。
——