Tha*_*dis 3 language-agnostic parallel-processing concurrency erlang
(我正在准备一个简短的erlang教程)以及我们如何能够拥有并发或并行的东西(例如,在一个核心上运行的经典C hello世界),这是并发的而不是并行的(例如,在一个代码上运行多个actor的erlang程序)以及并行和并发的东西(例如,在多个核上运行的先前的erlang程序).
但是,我不太确定我们怎么能有一些有意义的并行而不是并发的东西; 我想我们可以砍掉一个程序的指令并将它们并行运行,但这不会产生任何有意义的结果.运行两个不在两个内核上交互的程序是没有并发性的并行系统的一个例子吗?不知怎的,我觉得可能有一个更好的例子; 有任何想法吗?
如果你环顾四周,你会发现很多人对于并发性和并行性的确切存在分歧.在提供示例之前,您必须为您的目的定义它们.
并发有时被定义为多个任务,其顺序无关紧要(因此A可以在B之前运行,或者B可以在A之前运行,而不会导致问题).然而,有时候还有一点需要注意,A和B必须朝着共同的目标努力.
并行性通常定义为同时运行的两个任务,例如使用两个处理器或两个单独的计算机.然而,并行性也经常被认为是朝着共同的目标努力,因此两个独立的程序可以在多处理器机器上同时执行的事实可能并不真正是并行性,因为它们彼此无关.
因此,根据定义,没有并发性可能无法实现并行性,因为(通过这些定义)并行性意味着并发性.一旦你有了并发和并行的具体定义,那么你就可以弄清楚这些例子的样子.
如果我在Erlang教程中解释这一点,我可能完全避免提及并发性和并行性,只是因为它太混乱了.我会说Erlang的进程彼此独立工作,但可以通过消息传递进行通信.如果硬件支持它,或者如果正在使用多个Erlang节点,则这些进程可能实际上同时运行.否则,二郎安排他们似乎同时运行,就我们关心. 这涵盖了并发性和并行性的广泛思想,而不必担心对定义的无意义争吵
注意:上述并发和并行的示例定义并不是详尽无遗或权威的.它们仅用于说明目的.