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


当前回答

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

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


没有并行性的并发示例:

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

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

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

其他回答

我喜欢Rob Pike的演讲:并发不是并行(这更好!)(幻灯片)(谈话)

Rob通常谈论Go,并且通常以直观直观的解释来解决并发与并行的问题!下面是一个简短的总结:

任务:让我们烧掉一堆过时的语言手册!一次一个!

并发:任务有许多并发分解!一个例子:

并行性:如果至少有2个地鼠同时工作或不工作,则前面的配置会并行出现。

它们解决不同的问题。并发性解决了CPU资源稀缺和任务多的问题。因此,您可以通过代码创建线程或独立的执行路径,以便在稀缺资源上共享时间。直到最近,由于CPU的可用性,并发性一直是讨论的焦点。

并行性解决了找到足够的任务和适当的任务(可以正确分割的任务)并将它们分配到大量的CPU资源上的问题。当然,并行性一直都存在,但由于多核处理器非常便宜,所以它正走到最前沿。

并发是编程术语。它是关于多个任务的,这些任务开始运行并以无特定顺序在重叠的时间段内完成。并发性由操作系统管理。当多个线程想要访问同一资源时,线程会遇到竞争条件问题。此外,它们还存在死锁,彼此等待,阻止自己运行。例如,你想一边吃饭一边说话。首先你需要吞下嘴里的食物或停止咀嚼,然后你可以说话(你在划水),说话后你可以再咬一口。

并行性是一个硬件术语。它是关于在具有多个计算资源(如多核处理器)的硬件上同时运行的多个任务。如果你能在咀嚼食物时说话,这将是平行的。平行的一个例子是,一个人可以同时唱歌和跳舞。

这篇惊人的博客节选:

并发和并行之间的区别:并发是指两个任务可以在重叠的时间段。并行性是指任务在例如在多核处理器上。并发是独立执行进程的组成,而并行是同时执行(可能相关)计算。并发是指同时处理许多事情。相似一次做很多事情。应用程序可以是并发的,但不能是并行的,这意味着它同时处理多个任务,但没有两个任务在同一时刻执行。应用程序可以是并行的,但不能是并发的,这意味着它在多核CPU中同时处理一个任务的多个子任务时间应用程序既不能并行,也不能并发,这意味着它一次一个地、顺序地处理所有任务。应用程序既可以是并行的,也可以是并发的,这意味着它在多核CPU中同时处理多个任务时间

想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。

现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。

正如Andrew Gerrand在GoLang博客中所说

并发是指同时处理许多事情。相似一次做很多事情。

享受