【问题标题】:Is concurrent programming the same as parallel programming?并发编程和并行编程一样吗?
【发布时间】:2010-11-11 02:51:28
【问题描述】:

它们是同一个东西吗?看看几何中并发或并行的含义,我肯定会说不:

在几何学中,如果两条或多条直线相交于一个点,则称它们是并发的。

平面上的两条线不 相交或相遇称为平行 行。

再次,在编程中,它们具有相同的含义吗?如果是...为什么?

谢谢

【问题讨论】:

  • +1 很好的问题。存在于programmers.stackexchange.com 上会更好吗? Programmers - Stack Exchange is for expert programmers who are interested in subjective discussions on software development.
  • @JohnK 我不认为这些定义是主观的。

标签: concurrency terminology parallel-processing


【解决方案1】:

我同意几何词汇存在冲突。想想火车轨道:平行轨道上的两列火车可以独立并同时运行,几乎没有互动。这些列车同时并行运行。

基本的使用困难是“并发”可以表示“同时”(与火车或代码)或“在同一地点”(与几何线)。出于许多实际目的(火车、线程资源),这两个概念直接冲突。

自然语言被认为是愚蠢的、模棱两可的和令人困惑的。但我们是程序员。我们可以在我们的正式编程语言的清晰、简单和优雅中寻求庇护。像 perl。

【讨论】:

  • +1 考虑周全,但最后一句话肯定是个笑话?
【解决方案2】:

来自*:

并发计算是一种 计算其中的程序 设计为交互的集合 计算过程可能是 并行执行。

基本上,如果程序由较小的交互进程组成,则可以将它们编写为并发程序。并行编程其实就是同时做这些过程。

所以我认为并发编程实际上是一种适合并行执行进程以提高性能的风格。

【讨论】:

    【解决方案3】:

    不,绝对并发与并行不同。具体方法如下。

    并发是指在同一时间范围内共享资源。例如,多个进程可能共享同一个 CPU 或共享内存或 I/O 设备。

    现在,根据定义,如果仅当第二个进程在第一个终止之前(在同一个 CPU 上)开始执行时,两个进程才是并发的。如果这两个进程都运行在同一个——比如说现在——单核 CPU 上,那么这些进程是并发的,但不是并行的:在这种情况下,并行性只是虚拟的,是指操作系统进行分时。操作系统似乎同时执行多个进程。如果只有一个单核 CPU,则在任何特定时间只能执行来自一个进程的一条指令。由于人类的时间尺度比现代计算机慢数十亿倍,因此操作系统可以在进程之间快速切换,以呈现多个进程同时执行的外观。

    如果您改为在两个不同的 CPU 上运行这两个进程,则这些进程是并行的:在同一时间范围内不存在共享,因为每个进程都在自己的 CPU 上运行。这种情况下的并行性不是虚拟的,而是物理的。这里值得注意的是,运行在同一个多核CPU的不同核上仍然不能归类为完全并行,因为进程会共享相同的CPU缓存,甚至会相互竞争。

    【讨论】: