57

如果我错了,请纠正我,但我很惊讶以前没有在这里问过这个问题......

4

10 回答 10

122

这是一个非常简单的区别。在共享内存模型中,多个工作人员都对相同的数据进行操作。这引发了许多并行编程中常见的并发问题。

消息传递系统使工作人员通过消息系统进行通信。消息将每个人分开,因此工作人员无法修改彼此的数据。

以此类推,假设我们正在与一个团队一起开展一个项目。在一个模型中,我们都挤在一张桌子旁,我们所有的论文和数据都摆好了。我们只能通过改变桌面上的东西来交流。我们必须小心,不要试图一次对同一条数据进行操作,否则它会变得混乱,事情就会混淆。

在消息传递模型中,我们都坐在办公桌前,拿着自己的一套文件。当我们想要的时候,我们可以将一张纸作为“信息”传递给其他人,而那个工人现在可以用它做他们想做的事。我们只能访问我们面前的任何东西,所以我们永远不必担心有人会在我们总结它们的过程中伸手改变其中一个数字。

好吧,愚蠢的比喻!

于 2009-12-05T20:15:01.690 回答
21
  1. 在共享内存模型中,内存由协作进程共享,它们可以通过读取和写入数据来交换信息,但在消息传递中,通信是通过协作进程之间交换的消息进行的。
  2. 共享内存有助于同时运行进程,但消息传递不能。
  3. 消息传递工具有两个操作:发送(消息)和接收(消息)。其进程具有固定或可变大小。
  4. 消息传递对于交换少量数据很有用,因为不需要避免冲突。消息传递也比用于进程间通信的共享内存更容易实现。
  5. 在共享内存系统中,系统调用只需要建立共享内存区域。一旦建立共享内存,所有访问都被视为常规内存访问,不需要内核的帮助。

快点

共享内存允许最大的通信速度和便利性,因为它可以在计算机内以内存速度完成。共享内存比消息传递更快,因为消息传递系统通常使用系统调用实现,因此需要更耗时的内核干预任务。

于 2014-06-03T20:15:49.203 回答
12

消息传递模型(例如 Erlang)没有任何共享状态;所有同步和通信都是通过交换消息来完成的。共享内存模型通过读/写共享内存块进行通信,共享内存块受信号量或类似的保护。

于 2009-12-05T20:09:33.617 回答
4

消息传递是证明数据合理性的好方法,但它具有较慢的响应时间以加快通信速度。但是在共享内存模型中,数据是从一个内存中提取的,并且工作组可以对相同的数据执行不同的工作

于 2012-12-05T09:06:02.237 回答
3

尽管您正在询问消息传递模型和共享内存模型之间的区别,并且已经就它们的性能、交换信息的方式和并发问题得到了很好的答案,但我想指出:

它们之间在可计算性方面(在某些条件下)没有根本区别。

您可以在底层消息传递系统上模拟共享内存。这使得可以将共享内存模型视为用于在异步分布式消息传递系统中设计算法的高级语言。

特别是,这篇论文ABD@JACM'95表明

任何基于原子的、单写入器(和多写入器)多读取器寄存器的无等待算法都可以在消息传递系统中自动模拟,前提是至少大多数处理器没有故障并保持连接。这些仿真引入的开销是系统中处理器数量的多项式。

于 2014-08-06T13:40:00.503 回答
2

对于一些需要快速响应时间的应用程序来说,消息传递系统的吞吐量可能太低,但是如果您需要更高的速度或实时处理,那么您可以使用共享内存系统。

于 2010-12-23T19:34:38.330 回答
2

已经给出的答案提供了丰富的信息,但大多数人都提到了共享内存比消息传递更快的想法,这实际上是一个非常幼稚的说法。在任何有用的实际系统中,共享内存访问都需要锁定机制来控制来自单独线程的访问,这几乎总是比使用消息传递实现相同的系统要慢。

于 2019-01-26T13:12:59.800 回答
0

要区分消息传递和共享内存,请考虑五件事:

  1. 通信:- 在消息传递的情况下,通信取决于程序员喜欢与哪个进程通信。但是在共享内存的情况下,通信是自动完成的。
  2. 数据分布:-mp(手动) sm(自动)
  3. 硬件支持:- mp(简单)sm(广泛,因为它必须智能才能自动检测进程间)
  4. 正确性:-mp(难)sm(不太难)
  5. 性能:-mp(困难)sm(非常困难)`
于 2018-04-14T18:40:51.023 回答
0

共享内存 S/m 要求通信进程共享一些变量。进程按预期通过使用这些共享变量来交换信息。在共享内存方案中,提供通信的责任在于应用程序程序员。操作系统只需要提供共享内存。

于 2019-11-23T06:22:23.743 回答
0

在 DTU 计算 PI 的课程中​​进行了测试,MPI(消息传递)在我们的 HPC 上通常优于 pthreads 或 OpenMP(共享内存)。

于 2020-05-14T11:29:04.807 回答