【问题标题】:Concurrency is not Parallelism? [closed]并发不是并行? [关闭]
【发布时间】:2012-07-26 21:47:48
【问题描述】:

Here 是 Rob Pike 的幻灯片。每次经过这个我都觉得自己像个白痴。我无法弄清楚它的要点。众所周知,并发是将复杂问题分解为更小的组件。如果你不能正确地将某些东西分成更小的部分,那么使用并发就很难解决它。

但是幻灯片中没有太多关于在实现并发后如何获得并行性的详细信息。在课程幻灯片(编号 52)中,他说并发 - “甚至可能是并行的”。但问题是 - 并发何时以及如何正确有效地导致并行?

我的猜测是,Rob 指出开发人员应该在并发级别上工作,而并行性应该是语言/虚拟机的关注点(gomaxprocs?)。只关心智能分解成更小的单元,只关心正确的并发性——并行性将由“系统”负责。

请多指教。

【问题讨论】:

  • 这里的开放式讨论的范围有点太大了。我已经问过 Programmers.SE 模组,这是否可以在那里工作。谢谢。

标签: multithreading concurrency parallel-processing


【解决方案1】:

Rob Pike 是什么意思

当您考虑到算法的抽象形式时,您必须选择是使用消息传递或共享内存还是混合来实现它。您还必须考虑内存访问的类型(NUMA、UMA 等)和使用的拓扑(Hypercube、Torus、Ring、Mesh、Tree 等)

对于只想要一些东西的人来说,这似乎需要做很多工作,甚至可能很简单,以并行方式完成(例如并行)。

而且工作量很大,尤其是在您更改拓扑时(这样您就可以发挥其所有优势)。

所以你编写并行代码(无论是简单的还是复杂的),VM 或编译器会选择似乎是最好的方法,甚至以顺序方式运行它!(一个例如 .net 的任务并行库)

重要编辑:

我应该提一下,我说的是程序/算法中的并发,而不是系统中运行的独立程序之间的并发。

你说过

众所周知,并发是将复杂问题分解为更小的组件。如果你不能正确地将某个东西分成更小的部分,那么使用并发很难解决它

但是b/c是错误的那些较小的组件可能会以顺序的方式相互依赖来完成,所以即使你分成小组件,也不代表你实现了并发/并行.

在我所有的并行和分布式算法类别中(在 BS 和 MS 中)我们从未谈论过“我们获得了并发性,现在让我们看看如何获​​得并行性” .如果你用并发这个词来描述和算法,那么你就意味着并行,反之亦然。

在文献中,您还会发现分布式和并行之间有一条细线。

从算法的角度来看,您可以使用并发、并行和分布式,并且您会得到相同的想法。

从实现的角度来看,如果说“并行”,通常是指在本地计算机或集群上运行的程序(共享内存通信),而当您在网格上运行程序时是“分布式”(消息传递通信)。

现在,分布式和并行都意味着并发。

我认为您应该对这些术语的确切含义持怀疑态度,因为即使在文献中(我谈论的是对这一领域做出实际贡献的人,而不仅仅是创造某种语言),它们也被用来表达抽象概念。

算法(无论是程序)的并发性意味着拥有可以独立于其他代码段运行的代码片段,即使它们最终会等待其他一些代码片段(查看阿姆达尔定律以准确了解这个)。

因此,当您在算法/程序中具有并发性时,您也具有并行性。

我认为最好只实现一些并行和分布式算法以更好地理解其背后的想法。如果您了解 C/C++,则可以将 OpenMPI 用于分布式(消息传递)实现,将 OpenMP 用于并行(共享内存)实现。

编辑:

他也可以将并发作为抽象原理,将并行作为实现方式[共享内存,消息传递,两者之间的混合;内存访问类型(numa、uma 等)]。

【讨论】:

  • 我认为 Rob Pike 所说的重点是关于“处理并行性”——在多核处理器上同时运行多个线程。
  • 我已经在编辑部分介绍了这个:)。
  • 阿姆达尔定律在涉及超过 1 个内核/处理器时谈论并行性。 en.wikipedia.org/wiki/Amdahl's_law
  • 看来你阅读量太大,没有练习。您应该花大约 15 分钟的时间再次阅读并发性是什么。你误导了一些基础知识。您可以使用抢占式分时线程在单核处理器上获得并发性。在单核处理器上无法实现的是并行性。明白了吗?
  • @devundef 我使用的概念仅与算法(及其实现)有关。而且我有足够的实践来使用 OpenMP 和 OpenMPI 实现并行和分布式算法。不要混淆关于算法和操作系统视图的概念。这是我觉得算法(及其实现)上下文中的并发性是一个糟糕的选择 b/c 人们会开始在操作系统级别而不是专门针对该程序进行思考的方式。
猜你喜欢
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
相关资源
最近更新 更多