并发和并行之间的区别是什么?


当前回答

并发与并行

Rob Pike在《并发不是并行性》中

并发是指同时处理许多事情。

并行是指同时做很多事情。

[并发理论]

并发-一次处理多个任务并行性-一次处理多个线程

我对并发性和并行性的看法

[同步与异步][Swift并发]

其他回答

并发是指两个或多个任务可以在重叠的时间段内启动、运行和完成。这并不一定意味着它们会同时运行。例如,在单核机器上进行多任务处理。

并行性是指任务实际上同时运行,例如在多核处理器上。


引用Sun的多线程编程指南:

并发:至少有两个线程正在进行时存在的条件。一种更为普遍的并行形式,可以将时间切片作为虚拟并行的一种形式。并行性:当至少两个线程同时执行时出现的情况。

“并发”是指有多件事情正在进行。

“并行性”是指并发的事情同时进行。


没有并行性的并发示例:

单个内核上有多个线程。Win32消息队列中有多条消息。MARS连接上有多个SqlDataReader。浏览器选项卡中有多个JavaScript承诺。

然而,请注意,并发性和并行性之间的区别通常是一个视角问题。从执行代码(可观察到的效果)的角度来看,上述示例是非并行的。但即使在单个内核中也存在指令级并行性。有一些硬件与CPU并行工作,然后在完成时中断CPU。在执行窗口过程或事件处理程序时,GPU可能正在绘制到屏幕。当您仍然获取上一个查询的结果时,DBMS可能正在为下一个查询遍历B树。执行Promise.resolve()时,浏览器可能正在进行布局或联网。等等。。。

好了。世界一如既往地混乱;)

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

但对于C来说,他的大脑必须同时进行听A和B的过程,这可能是:我是我A是B。

通过查阅字典,你可以看到并发(来自拉丁语)意味着一起运行、聚合、同意;因此,需要同步,因为在相同的资源上存在竞争。平行(来自希腊语)的意思是在侧面复制;从而在同一时间做同样的事情。

同意:具有共享资源潜力的多个执行流

前任:两个线程竞争I/O端口。

视差:将问题分成多个相似的块。

前任:通过对文件的每一半运行两个进程来解析大文件。