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

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

例子表示赞赏。


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

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


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

  • 并发性:至少有两个线程正在进步时存在的条件。 一种更普遍的并行性形式,可以包括时间分割作为虚拟并行的一种形式。

  • 并行性:至少有两个线程同时执行时出现的一种情况。


  • 为什么存在混淆

    存在混淆因为这两个词的字典含义几乎相同:

  • 并发同时存在,发生或完成(dictionary.com)
  • 平行 :非常相似,经常同时发生(merriam webster)。
  • 然而,他们在计算机科学和编程中使用的方式却完全不同。 这是我的解释:

  • 并发性 :可中断性
  • 并行性 :独立性
  • 那么上面的定义是什么意思?

    我将用现实世界的比喻来澄清。 假设你必须在一天内完成2个非常重要的任务:

  • 获得护照
  • 完成演示
  • 现在,问题在于任务1要求你去一个极其官僚的政府办公室,让你排队等4个小时才能拿到护照。 同时,你的办公室需要任务2,这是一项关键任务。 两者都必须在特定的一天完成。

    案例1:顺序执行

    通常情况下,你将开车到护照办公室2小时,排队等待4小时,完成任务,开车返回两个小时,回家,再离开5个小时,完成演示。

    情况2:并发执行

    但你很聪明。 你提前计划。 你随身携带一台笔记本电脑,在等待排队时,你开始处理演示文稿。 这样,一旦你回到家中,你只需要增加1小时而不是5。

    在这种情况下,这两项任务都是由你完成的,只是分段完成。 你在排队等待期间中断了护照任务,并进行了演示。 当你的号码被呼叫时,你中断了演示任务并切换到护照任务。 由于这两项任务的可中断性,节省时间本质上是可能的。

    在数据库的ACID属性中,并发性应视为“隔离”。 如果以任何交错方式在每个事务中执行子事务,并且最终结果与两个任务连续完成相同,则两个数据库事务满足隔离要求。 请记住,无论是护照和演示任务,你都是唯一的execution子手。

    案例3:并行执行

    现在,既然你是一个聪明的家伙,你显然是一个更高级的人,而且你有一个助手。 所以,在你离开开始护照任务之前,你打电话给他,并告诉他准备演示文稿的初稿。 你花了整整一天的时间完成护照任务,回来看看你的邮件,并找到演示稿。 他已经完成了一项非常稳定的工作,并且在2个小时内完成了一些编辑工作,最终确定完成。

    现在,您的助理和您一样聪明,他可以独立工作,无需不断向您询问澄清情况。 因此,由于任务的独立性,它们由两个不同的execution子手同时执行。

    还在我这儿? 好的...

    案例4:并行但不平行

    记住你的护照任务,你必须等待排队吗? 由于这是您的护照,您的助理不能排队等候您。 因此,护照任务具有中断能力(您可以在排队等待时停止它,并在您的号码被呼叫时稍后恢复),但没有可独立性(您的助手不能等待替代)。

    案例5:并行但不并行

    假设政府办公室有进入房屋的安全检查。 在这里,您必须移除所有电子设备并将其提交给管理人员,并且他们只在完成任务后才返回设备。

    在这种情况下,护照任务既不可独立也不可中断。 即使你在排队等待,你也无法处理其他事情,因为你没有必要的设备。

    同样,如果说演示文稿的数学性质非常高,那么至少需要5个小时才能达到100%的浓度。 即使您携带笔记本电脑,也无法在等待护照任务时执行此操作。

    在这种情况下,演示任务是可独立的(无论是你还是你的助理都可以投入5小时的精力),但不能中断。

    案例6:并行和并行执行

    现在,除了将你的助手分配给演示文稿之外,你还可以携带笔记本电脑与护照任务。 在等待排队时,你会发现你的助理已经在共享卡组中创建了前10张幻灯片。 您通过一些更正发送评论。 之后,当你回到家时,而不是2个小时来完成选秀,你只需要15分钟。

    这是可能的,因为演示任务具有可独立性(你们中的任何人都可以做到)和可中断性(您可以停止并在以后继续)。 所以你同时执行了两个任务,并行执行了演示任务。

    比方说,除了过于官僚,政府办公室是腐败的。 因此,您可以显示您的身份,输入密码,开始排队等候您的号码,贿赂警卫和其他人来保持您的位置,偷偷摸摸,在您的号码被叫之前回来,然后重新开始等待你自己。

    在这种情况下,您可以同时并行执行护照和演示任务。 你可以溜出去,你的位置由你的助手保存。 然后,你们两人都可以参与演示等。


    回到计算机科学

    在计算世界中,下面是每种情况的典型场景:

  • 情况1:中断处理。
  • 情况2:当只有一个处理器时,但所有正在执行的任务由于I / O而有等待时间。
  • 案例3:我们经常在讨论map-reduce或hadoop集群时看到。
  • 案例4:我认为案例4很少。 一个任务并发但并不平行的情况并不常见。 但可能会发生。 例如,假设您的任务需要访问可通过处理器-1访问的特殊计算芯片。 因此,即使处理器-2空闲且处理器-1正在执行某个其他任务,特殊计算任务也不能在处理器-2上继续。
  • 情况5:也很少见,但并不像案例4那么少见。非并发代码可以是受互斥体保护的关键区域。 一旦启动,它必须执行完成。 但是,两个不同的关键区域可以在两个不同的处理器上同时进行。
  • 案例6:国际海事组织(IMO)大部分关于并行或并发编程的讨论基本上都是在谈论案例6.这是混合和并行执行的并行执行。
  • 并发和去

    如果你明白Rob Pike为什么说并发性更好,你必须明白原因。 你有一个很长的任务,其中有多个等待期间,你等待一些外部操作,如文件读取,网络下载。 在他的演讲中,他所说的只是“分手这个长期的顺序任务,这样你就可以在等待的时候做一些有用的事情。”这就是为什么他会与各种地鼠讨论不同的组织。

    现在去的力量来自于使这个破真的很容易go的关键字和渠道。 此外,运行时还有很好的基础支持来安排这些goroutines。

    但从本质上讲,并行性是否更好?

    苹果比橘子更受欢迎吗?


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

    Rob通常会谈论Go,通常以直观和直观的解释来解决并发VS并行的问题! 这里是一个简短的总结:

    任务:让我们刻录一堆陈旧的语言手册! 一次一个!

    任务

    并发性:有很多并发的任务分解! 一个例子:

    地鼠

    并行性:如果至少有两个Gopher在同一时间工作,则以前的配置并行发生。

    链接地址: http://www.djcxy.com/p/79301.html

    上一篇: What is the difference between concurrency and parallelism?

    下一篇: How to avoid long nesting of asynchronous functions in Node.js