如何使用类比来解释JavaScript的单线程特性?

时间:2017-03-08 15:40:14

标签: javascript asynchronous

我已经阅读了很多关于JavaScript单线程,异步性质的文章,并希望一劳永逸地找到可以用来解释它的真实世界类比。

我设想JavaScript就像一个自助餐厅。你有一系列的人通过大门进入自助餐厅。与大多数自助餐厅一样,您有一个托盘系统 - 一个人将挑选一个托盘,将其放在铁轨上,并访问每个食品站,直到它们到达收银台。现在,如果你想象每个人一个接一个地击中轨道 - 这就是JavaScript的单线程特性。但是,由于JavaScript也可以异步执行,因此我们需要将其应用于类比...

所以,让我们说在这个美食大厅沿着铁路有5个食物站,我们专注于三个人撞到铁轨的开头,人A(同步),人B(异步)和人C(同步) 。人A,B和C经过食品站1并以相同的顺序到达食品站2。现在,人A通过食品站2没有任何问题,但是,人B想要的东西已经用完了,厨师正在烹饪它。因此,人B(异步)能够在那里等待,直到用餐准备好。与此同时,人员C获得他们的项目并超越人员B.人员A和C现在继续沿着铁路,而人员B继续等待他们的膳食准备。最后,B人收集他们的膳食,他们按照A-C-B的顺序到达。

希望这能说明JavaScript如何使用单个线程(轨道),以及当执行异步位代码时,返回数据的顺序在执行结束时可能会有所不同。

这个类比是否重申了单线程,异步JavaScript的本质?

1 个答案:

答案 0 :(得分:2)

也许你可以解释它有点像麦当劳在德国使用的系统。如果您的汉堡不可用并且需要花费几秒钟的时间才能得到它,您可以得到一个数字并拿走您已有的汉堡。当你的汉堡完成后,有人来到你身边并给你汉堡。从某种意义上说,这是一个回调函数,可以为您提供所需的数据,现在您可以完成工作(咀嚼汉堡)