该问题与此处提出的问题的主题重复。
我想要求就不同的观点做一些额外的澄清。
在分布式计算中,内存一致性最终是通过网络通道上的消息传递、分布式锁定等来实现的。消息传递,IIUC,并不总是消除并发性,除非在非常低的级别,因为进程通常仍然会影响彼此的状态。他们这样做,以他们认为一致的方式。
例如,可以在消息传递之上实现一个简单的命令解释器,并且可以将命令作为从多个熟悉进程并行执行的多个远程事务的一部分发送。因此,在大多数情况下,高级交互需要设计并发性。也就是说,IMO,进程不太可能没有长期操作的事务语义。
此外,发送具有一致状态值的消息并不能保证正确性。重要的是,这个值是如何产生的,以及在提供输入数据的消息和发布转换结果的消息之间发生了什么。
另一方面,与物理内存的低级交互本质上总是某种通过总线传递的消息。因此,在最低级别,共享内存和消息传递是相同的。
并且在每条指令级别,对齐的加载和存储的原子性通常得到保证。所以,区别对我来说仍然是模糊的。
在散文中,共享内存与消息传递的选择与并发性有何关系?只是选择解决并发问题的技术模式,以及定义和分析并行进程交互的数学模型,还是这些技术也是架构模式,当系统地应用时,从根本上影响系统中的并发问题?
谢谢。
编辑(一些补充说明):
显然,这两种方法的区别在于正确性和性能。但是我对这种区别有以下问题。
我知道消息可以像大分散虚拟数据的传输一样。但是,“按值”方法不能保证在非单一(或程序生成)逻辑数据的原子读取之外没有同步的一致性。通过一致性,我暗示诸如更改的因果关系或顺序等。通过消息传递,实际上,每个进程只会改变自己的内存。进程的作用就像其私有内存的控制器。这就像在消息传递之上共享,由拥有数据的进程序列化,但在 MESSAGE-BY-MESSAGE 的基础上(类似于内存如何逐字或逐个缓存行序列化基础)。应用程序程序员仍然有责任保证发送消息所涉及的事务的同步。即,从多个熟悉的进程到一个进程的消息必须按照与这些进程正在执行的操作的语义相对应的一致顺序发送。可能是对拥有进程的控制消息,或者通过竞争者之间的直接协调,但是对消息的并发性进行一些限制应该是最有必要的。
对于本地进程间通信(忽略争用),共享内存确实可以更快,但是为什么跨机器通信会出现这种情况呢?分布式计算的共享内存是在网络通信之上实现的。所以,共享内存,除了缓存的好处,不能更快。
技术明显不同。我似乎无法理解的是,当对两者都没有本质上的好处时,如何将它们进行广泛的比较。必须假设平台提供什么,以及软件试图完成什么,而这样的假设不能普遍正确。