并发的本质是时间问题。同步就是force一个时间上的操作顺序。临界区相当于用锁实现的原子性操作。
在分布式系统上,Total order是可能顺序世界的一个实例,partial order是加入因果关系后的限制。
可见点、生效点、强制点、barrier都是为了规整并发操作的时间顺序。规整性的程度就是区别。
通信原语、同步原语本质上是将两个局部的子系统里的时间参考系纳入到上层的时间参考系中。
多核CPU是一个分布式系统,内存模型就是一个例子。
事务也算是一个并发系统。隔离性的体现。
由于跟时间有关,并发的Bug也很暗复现。
语言的内存模型是同样的并发,只不过是在比较高的层次上规定了下面的层次必须保证什么。实际上就相当于告诉编译器做一些额外的工作,而编译器又会插入一些cpu汇编语言到执行流里面。
但是多线程的话,就会出问题,直接导致当前线程可能读到的并不是该变量的最新值,也就是没有保持内存和 CPU 寄存器的一致性。你看,这就是因为时间有延迟。
再看原子性,其实就是打包了一些时间上分开的操作。
再看常常迷糊的最终一致性或者cache的立即可见性,就是有时间的latency。