【问题标题】:What is the difference between concurrency and parallelism?并发和并行有什么区别?
【发布时间】:2010-11-06 05:15:40
【问题描述】:

并发和并行有什么区别?

欢迎提供示例。

【问题讨论】:

  • 简短回答:并发是两行客户从一个收银员处订购(线路轮流订购);并行性是两行客户从两个收银员处订购(每行都有自己的收银员)。
  • @chharvey:我真的认为这应该是答案。简短(两行文字,如果您不使用“简短答案”),中肯,立即可以理解。做得很好!
  • 助记符记住这个比喻:并发==同时客户;并行 == 同时付款
  • IMO,这个问题几乎每个程序员都觉得有必要问。就我自己而言,我已经问过这个问题,并多次问过其他人。因此,我认为在这里提出这个问题的第一个用户应该是唯一能够选择正确答案的用户是不正确的。我投票正确的答案是:stackoverflow.com/a/53992216/1365918
  • @chharvey 的简短回答很棒。我再补充一句来真正拼出来:“这里,每个收银员代表你机器的一个处理核心,客户是程序指令。”

标签: language-agnostic concurrency parallel-processing


【解决方案1】:

如果您想向 9 岁的孩子解释这一点。

【讨论】:

    【解决方案2】:

    太好了,让我用一个场景来展示我的理解。 假设有 3 个孩子叫:A、B、C。A 和 B 说话,C 听。 对于 A 和 B,它们是平行的: 答:我是A。 B:我是B。

    但是对于C来说,他的大脑必须采取并发进程来监听A和B,它可能: 我是我A是B。

    【讨论】:

      【解决方案3】:

      并发简单意味着多个任务正在运行(不需要并行)。例如,假设我们在任何时候都有 3 个任务:可能不止一个正在运行,或者所有可能同时运行。

      并行性意味着它们实际上是并行运行的。所以在这种情况下,这三个必须同时运行。

      【讨论】:

        【解决方案4】:

        Pike 的“并发”概念是一种有意的设计和实施决策。具有并发能力的程序设计可能会或可能不会表现出行为“并行性”;这取决于运行时环境。

        您不希望不是为并发设计的程序表现出并行性。 :-) 但就相关因素(功耗、性能等)的净收益而言,您需要一个最大并发设计,以便主机系统可以在可能的情况下并行执行。

        Pike 的 Go 编程语言极端地说明了这一点:他的函数都是可以正确并发运行的线程,即调用函数总是会创建一个线程,如果系统有能力,该线程将与调用者并行运行。一个拥有数百甚至数千个线程的应用程序,在他的世界里是再普通不过的了。 (我不是围棋专家,这只是我的看法。)

        【讨论】:

          【解决方案5】:

          摘自这个惊人的blog

          并发和并行的区别:

          并发是指两个任务可以在 重叠的时间段。并行性是指任务从字面上运行 同时,例如。在多核处理器上。

          并发是独立执行进程的组合, 而并行性是(可能相关)的同时执行 计算。

          并发是关于一次处理很多事情。并行性 是关于一次做很多事情

          一个应用程序可以是并发的——但不是并行的,这意味着 它同时处理多个任务,但没有两个任务 瞬间同时执行。

          一个应用程序可以是并行的——但不是并发的,这意味着 它在多核CPU中同时处理一个任务的多个子任务 时间。

          应用程序既不能并行,也不能并发,这意味着 它一次一个地处理所有任务,顺序。

          应用程序既可以是并行的,也可以是并发的,这意味着 它在多核 CPU 中同时处理多个任务 时间。

          【讨论】:

          • 一个应用程序可以是并行的——但不是并发的,这意味着它在多核 CPU 中同时处理一个任务的多个子任务。你能解释一下这条线吗?据我了解,并行应用程序始终是并发的。
          【解决方案6】:

          简单地说,并发同时处理很多事情

          “dealing”一词用粗体表示并发并行之间的区别。一次处理许多事情意味着一次完成许多事情,但它们是否同时执行并不重要。另一方面,做并行意味着一次做很多事情(同时执行)。因此,可以使用一个或多个处理资源来实现并发上下文。使用一个处理资源一次处理许多事情意味着您正在做许多事情,因为它们通过在任务之间执行context switching 同时执行。另一方面,具有许多处理资源的并发上下文意味着执行并行性。 这意味着我们通过并行来实现并发,但反之则不然。

          您可能想在我的article 中了解更多关于并发和并行性以及它们与当今技术的关系。

          【讨论】:

            【解决方案7】:

            只是为其他好的答案添加更多说明:

            基于处理的抽象(CPU作为一个非常可想象的例子)能够在同一时刻运行唯一的任务的前提,

            并发是一个关于处理抽象的故事:它可以在不同的任务之间切换。

            并行性是一个关于我们拥有多个处理抽象的故事(例如,我们的 CPU 有多个内核)。所以是我们的系统能够同时执行多项任务的原因(字面意思)。但是这里没有提到处理的特定抽象(它们是并发的还是不并发的)。

            这里的重点是什么这些故事。

            因此,当您阅读已接受的答案时请注意:

            并发是指两个或多个任务可以在其中启动、运行和完成 重叠的时间段。

            严格来说,可以根据该定义得出结论,并行性本身就以并发为前提。

            【讨论】:

              【解决方案8】:

              只要查字典,就可以看出concurrent(来自拉丁文)的意思是一起跑、会聚、同意;因此,需要同步,因为在相同资源上存在竞争。 Parallel(来自希腊语)意味着在侧面复制;所以在同一时间做同样的事情。

              【讨论】:

              • 您遭受的反对票是不恰当的。这是迄今为止最接近正确答案的答案。实际上,并行性是同时执行相同的行为。 Concurrently 意味着同时,但不一定是相同的行为。并行是一种特殊类型的并发,其中同时发生相同的事情。
              猜你喜欢
              • 2011-06-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-23
              • 2016-06-22
              • 2013-07-28
              • 1970-01-01
              相关资源
              最近更新 更多