3

所以我在考虑并发与并行(我正在准备一个简短的 erlang 教程)以及我们如何拥有既不并发也不并行的东西(例如在一个核心上运行的经典 C hello world),一些并发但不并行的东西(例如,在一个代码上运行多个参与者的 erlang 程序)以及并行和并发的东西(例如,之前在多个内核上运行的 erlang 程序)。

但是,我不太确定我们如何才能拥有一些有意义的并行但不并发的东西。我想我们可以砍掉程序的指令并并行运行它们,但这不会真正产生任何有意义的结果。运行两个不在两个内核上交互的程序是否是没有并发的并行系统的示例?不知何故,我觉得可能有一个更好的例子;有任何想法吗?

4

1 回答 1

7

如果您环顾四周,您会发现对于并发性和并行性到底是什么存在很多分歧。您必须先为您的目的定义它们,然后才能给出示例。

并发有时被定义为顺序无关紧要的多个任务(因此 A 可以在 B 之前运行,或者 B 可以在 A 之前运行,而不会导致问题)。但是,有时也需要注意,A 和 B 必须朝着共同的目标努力。

并行性通常定义为同时运行的两个任务,例如使用两个处理器或两台独立的计算机。然而,并行性也经常被认为是朝着一个共同的目标努力,因此两个独立的程序可以在多处理器机器上同时执行这一事实可能并不是真正的并行性,因为它们彼此无关。

因此,根据定义,没有并发性就不可能有并行性,因为(根据这些定义)并行性意味着并发性。一旦你有了并发和并行的具体定义,你就可以弄清楚这些例子应该是什么样子。

如果我在 Erlang 教程中解释这一点,我可能会完全避免提及并发性和并行性,因为它太混乱了。我想说Erlang 的进程彼此独立工作,但可以通过消息传递进行通信。如果硬件支持它,或者如果使用了多个 Erlang 节点,这些进程实际上可能会同时运行。否则,就我们而言,Erlang 会安排它们看起来同时运行。 这涵盖了并发性和并行性的广泛概念,希望不必担心对定义进行无意义的争吵

注意:上述并发和并行的示例定义并不意味着详尽或权威。它们仅用于说明目的。

于 2013-11-13T15:01:20.287 回答