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

Concurrency 并发编程和并行编程一样吗?,concurrency,terminology,parallel-processing,Concurrency,Terminology,Parallel Processing,他们俩是一回事吗?看看并行或并行在几何学中意味着什么,我肯定会说不: 在几何学中,如果两条或两条以上的直线在一个点相交,则称为相交 及 一个平面上的两条直线 相交或相交称为平行 台词 同样,在编程中,它们有相同的含义吗?如果是,为什么 感谢维基百科: 并发计算是一种 程序在其中运行的计算 设计为相互作用的对象的集合 计算过程可能是 并行执行 基本上,如果程序由较小的交互进程组成,则可以将其编写为并发程序。并行编程实际上是同时执行这些过程 因此,我认为并发编程确实是一种风格,它有助于并行执行进程以

他们俩是一回事吗?看看并行或并行在几何学中意味着什么,我肯定会说不:

在几何学中,如果两条或两条以上的直线在一个点相交,则称为相交

一个平面上的两条直线 相交或相交称为平行 台词

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

感谢维基百科:

并发计算是一种 程序在其中运行的计算 设计为相互作用的对象的集合 计算过程可能是 并行执行

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


因此,我认为并发编程确实是一种风格,它有助于并行执行进程以提高性能。

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

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


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

不,并发肯定不同于并行。下面就是具体的方法

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

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


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

+1个很好的问题。它能更好地存在于网络上吗<代码>程序员-堆栈交换适用于对软件开发的主观讨论感兴趣的专家程序员。@JohnK我不认为这些定义是主观的。+1用于深思熟虑,但最后一句肯定是个笑话?