异步、并行、并发详解 - 戈登·拉姆齐主演
我的女朋友目前正在攻读计算机科学学位。我尽量不插手,但有时看到她讲解的概念和主题非常糟糕,我不得不插手。上个季度,她的课程涵盖了并行计算、任务调度和其他操作系统层面的概念。这些概念对于新手程序员来说非常难懂,而她的老师对此也无能为力。我花了一些时间构思了一个易于理解的故事,觉得值得分享。
地狱厨房(我保证它会有结果)
《地狱厨房》(一档糟糕的烹饪真人秀)在我家简直就是罪孽深重的娱乐节目。对于那些不熟悉这部剧的人来说,每一季一开始都有两支厨师队伍,红队和蓝队。每天晚上,他们在不同的厨房里做饭,表现更差的队伍就会永久失去一名成员(冷静点,他们不会杀了那个成员)。下面我粗略地画了一张图,大致就是这样的。
当你在地狱厨房做饭时,你应该了解一些事情。
-
“通行证”指的是服务员把订单送到厨房的柜台。在地狱厨房,只有戈登·拉姆齐可以向厨师们下订单。这意味着他的时间必须在红厨房和蓝厨房之间分配。
-
点餐按桌计费。所有菜品均按点单烹制,且必须同时完成(否则食物会变冷)。
该过程如下:
- 服务员将餐桌的“票”(订单)带到传送带上。
- 戈登·拉姆齐验证了票据(确保这是一份有效的订单)。然后,他把票据上的菜品叫到相应的厨房。他不会对每个厨师讲话,他们应该在听到这些话时就知道自己的职责是什么。
- 厨师们开始烹饪,同时互相协调,以确保同时完成菜肴。
- 所有菜肴都经过上菜环节。戈登·拉姆齐检查每道菜品的质量。
- 假设每道菜都是正确的(记住,如果一道菜出错,那么所有的菜都会出错),戈登现在会按铃告诉服务员订单已经准备好了。
地狱厨房管道
如果你理解了最后一节,那么你已经理解了并行计算背后最难的概念。让我们快速定义一下我们想要学习的概念。
并行——同一时刻发生的多件事
异步——你开始做某事,但不要等着它完成
并发——无需等待前一个任务完成即可提交多个任务(而不是单个文件行)。
平行线
最简单的是并行。地狱厨房里很多事情都是并行发生的。蓝队的厨师们同时烹饪他们的菜肴,这就是并行。两个厨房也同时烹饪订单,这就是并行。厨师烹饪时,服务员接单,因此服务员与厨师并行工作。问以下问题来判断某件事是否并行:
我是否需要克隆自己来完成这项任务?
如果答案是肯定的,那么很可能是平行的
并发
并发和并行最容易被人们混淆。并发意味着在某个时间段内,同时执行多件事。人类的多任务处理能力是并发的,而不是并行的,因为你无法真正做到“同时做两件事”。
在《地狱厨房》中,戈登·拉姆齐在各个厨房之间来回巡视食物时,实际上是在同时工作。他不是在同时工作,因为那是不可能的,戈登·拉姆齐只有一个。这是一个并发但非并行的例子,因为……
他可以在厨房的左边……
或者右侧...
但绝不会是两边都这样!以这种方式实现并发,就被称为“交错并发”。
并行和并发紧密相关,因为并行是实现并发的一种方法。如果戈登·拉姆齐决定聘请一位新的主厨来管理蓝色厨房,而他自己则管理红色厨房,那么这既是并发,也是并行。
异步
异步任务对人们来说有点棘手。异步简单来说就是启动某项任务后无需等待其完成。
在地狱厨房,服务员会带着票到通道去烹饪食物。他们不会站着等食物做好后再回到餐厅。相反,他们会依靠铃铛来判断订单是否做好。
人们常常对并行/并发和异步任务之间的关系感到困惑。
试想一下,戈登·拉姆齐可以决定,所有事情都由他自己处理,而不是团队烹饪和服务员点餐。他还决定继续管理通行证并收集餐券(毕竟他是戈登·拉姆齐)。由于戈登·拉姆齐只有一个人,这一改变会立即消除餐厅的所有并行性。但只要戈登·拉姆齐不把订单拿到通行证上站着等着(他是唯一一个在工作的人,所以这样做很愚蠢),它就是异步的。
需要注意的是,如果戈登站着等自己做饭,这将是同步的
总而言之,异步任务至少需要并发性,但不需要并行性,尽管并行性也可以。
结论
并行- 您需要克隆吗?
并发——您可以提交多个任务而无需等待前一个任务完成吗?
异步——无需等待某事完成
如果这篇文章有帮助,我还有很多其他概念可以融入到类比中,并且不介意创建另一篇文章。
文章来源:https://dev.to/taillogs/parallel-computing-simplified-starring-gordon-ramsay-1epi