Concurrency 并发/并行组合

Concurrency 并发/并行组合,concurrency,language-agnostic,parallel-processing,erlang,Concurrency,Language Agnostic,Parallel Processing,Erlang,因此,我在思考并发性与并行性(我正在准备一个简短的erlang教程),以及如何使一些东西既不是并发的也不是并行的(例如,一个经典的C hello world在一个内核上运行),一些东西是并发的但不是并行的(例如,一个erlang程序在一个代码上运行多个参与者)以及并行和并发的东西(例如,以前运行在多个内核上的erlang程序) 然而,我不太确定我们怎么会有一些有意义的东西是平行的,而不是并行的;我想我们可以将程序的指令切碎并并行运行,但这不会产生任何有意义的结果。运行两个不在两个内核上交互的程序

因此,我在思考并发性与并行性(我正在准备一个简短的erlang教程),以及如何使一些东西既不是并发的也不是并行的(例如,一个经典的C hello world在一个内核上运行),一些东西是并发的但不是并行的(例如,一个erlang程序在一个代码上运行多个参与者)以及并行和并发的东西(例如,以前运行在多个内核上的erlang程序)


然而,我不太确定我们怎么会有一些有意义的东西是平行的,而不是并行的;我想我们可以将程序的指令切碎并并行运行,但这不会产生任何有意义的结果。运行两个不在两个内核上交互的程序会是没有并发的并行系统的一个例子吗?不知何故,我觉得可以有一个更好的例子;有什么想法吗?

如果你环顾四周,你会发现在并发和并行的确切含义上有很多不同意见。在能够给出示例之前,您必须为自己的目的定义它们

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

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

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

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

注意:上面的并发性和并行性示例定义并不详尽或权威。它们只是为了说明的目的