并发和并行之间的区别是什么?
当前回答
想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。
现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。
正如Andrew Gerrand在GoLang博客中所说
并发是指同时处理许多事情。相似一次做很多事情。
享受
其他回答
并发是编程术语。它是关于多个任务的,这些任务开始运行并以无特定顺序在重叠的时间段内完成。并发性由操作系统管理。当多个线程想要访问同一资源时,线程会遇到竞争条件问题。此外,它们还存在死锁,彼此等待,阻止自己运行。例如,你想一边吃饭一边说话。首先你需要吞下嘴里的食物或停止咀嚼,然后你可以说话(你在划水),说话后你可以再咬一口。
并行性是一个硬件术语。它是关于在具有多个计算资源(如多核处理器)的硬件上同时运行的多个任务。如果你能在咀嚼食物时说话,这将是平行的。平行的一个例子是,一个人可以同时唱歌和跳舞。
并发是并行的广义形式。例如,并行程序也可以称为并发程序,但反向不成立。
可以在单个处理器上并发执行(多个线程,由调度器或线程池管理)在单个处理器上无法并行执行,但在多个处理器上无法。(每个处理器一个进程)分布式计算也是一个相关的主题,它也可以被称为并发计算,但反过来却不是,就像并行一样。
有关详细信息,请阅读本研究论文并行编程的概念
要补充其他人所说的话:
并发性就像让一个玩杂耍的人玩多个球。不管看起来如何,玩杂耍的人每次只手抓/扔一个球。平行运动是让多个杂耍者同时变戏法。
“并发”是指有多件事情正在进行。
“并行性”是指并发的事情同时进行。
没有并行性的并发示例:
单个内核上有多个线程。Win32消息队列中有多条消息。MARS连接上有多个SqlDataReader。浏览器选项卡中有多个JavaScript承诺。
然而,请注意,并发性和并行性之间的区别通常是一个视角问题。从执行代码(可观察到的效果)的角度来看,上述示例是非并行的。但即使在单个内核中也存在指令级并行性。有一些硬件与CPU并行工作,然后在完成时中断CPU。在执行窗口过程或事件处理程序时,GPU可能正在绘制到屏幕。当您仍然获取上一个查询的结果时,DBMS可能正在为下一个查询遍历B树。执行Promise.resolve()时,浏览器可能正在进行布局或联网。等等。。。
好了。世界一如既往地混乱;)
并发可以涉及同时运行或不同时运行的任务(它们确实可以在单独的处理器/内核中运行,但也可以在“滴答声”中运行)。重要的是,并发总是指完成一项更大任务的一部分。所以基本上这是一些计算的一部分。你必须聪明地知道你可以同时做什么,不可以做什么,以及如何同步。
并行性意味着你只是同时做一些事情。他们不需要参与解决一个问题。例如,您的线程可以分别解决一个问题。当然,同步的东西也适用,但从不同的角度来看。