并发编程和并行编程一样吗?

时间:2010-11-11 02:51:29

标签: concurrency terminology parallel-processing

3 个答案:

答案 0 :(得分:6)

我同意几何词汇是冲突的。改为考虑火车轨道:平行轨道上的两列火车可以独立运行,同时很少或没有相互作用。这些列车同时并行运行。

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

自然语言假设愚蠢,含糊不清,令人困惑。但我们是程序员。我们可以躲避正式编程语言的清晰,简洁和优雅。像perl。

答案 1 :(得分:3)

来自维基百科:

  

并发计算是一种形式   计算在哪些程序中   设计为交互的集合   可能的计算过程   并行执行。

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

所以我认为并发编程实际上是一种风格,它有助于并行执行流程以提高性能。

答案 2 :(得分:2)

不,肯定并发与并行不同。这是如何。

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

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

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