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

12

它们是同一件事吗?仅从几何学的角度看,并发或并行的含义明显不同:

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

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

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

谢谢


+1 很好的问题。也许放在http://programmers.stackexchange.com/上更好?“程序员-堆栈交换”是为对软件开发主观讨论感兴趣的专业程序员而设立的。 - John K
@JohnK 我认为这些定义并不主观。 - J D
3个回答

6
我同意几何术语存在冲突。可以将其类比于铁路:在平行的轨道上行驶的两列火车可以独立或同时运行,几乎没有互动。这些火车并发地、并行地行驶。
基本使用难点在于“并发”既可以表示“同时进行”(与火车或代码一样),也可以表示“在同一位置”(与几何线条一样)。对于许多实际用途(火车、线程资源)来说,这两个概念直接冲突。
自然语言应该是愚蠢的、模棱两可的和令人困惑的。但我们是程序员。我们可以在正式编程语言的清晰、简单和优雅中寻求庇护。就像 Perl 一样。

2
+1 因为思路周密,但是最后一句话肯定是个笑话吧? - Rafe Kettler

3

来自维基百科:

并发计算是一种计算形式,其中程序被设计为相互交互的计算过程集合,这些过程可以并行执行。

基本上,如果程序由较小的相互作用的过程组成,则可以编写并发程序。并行编程实际上是同时执行这些过程。

因此,我认为并发编程实际上是一种风格,适用于进程在并行执行以提高性能。


2
不,同时性和并行性是不同的。具体来说,同时性指的是在同一时间内共享资源。例如,多个进程可以共享同一个CPU、内存或I/O设备。
根据定义,在同一个CPU上,如果第二个进程在第一个进程终止之前开始执行,那么这两个进程就是同时的。如果这两个进程都在同一个(暂且说单核)CPU上运行,则它们是同时的但不是并行的:在这种情况下,并行只是虚拟的,指的是操作系统进行时间共享。操作系统似乎同时执行多个进程。如果只有一个单核CPU,则任何特定时间只能执行一个进程的一个指令。由于人类时间尺度比现代计算机慢数十亿倍,因此操作系统可以快速地在进程之间切换,以呈现出多个进程同时执行的外观。
如果你将这两个进程分别在两个不同的CPU上运行,则这两个进程是并行的:因为每个进程都在自己的CPU上运行,所以在同一时间内没有共享。在这种情况下,并行性不是虚拟的而是物理的。值得注意的是,即使在同一多核CPU的不同核心上运行,也不能被归类为完全并行,因为这些进程将共享相同的CPU缓存,并且甚至会争夺它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接