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

标签 javascript asynchronous

我读过很多关于 JavaScript 单线程、异步性质的文章,并且想一劳永逸地找到一个可以用来解释它的现实世界的类比。

我设想 JavaScript 就像一个自助餐厅。一连串的人从大门进入自助餐厅大厅。与大多数自助餐厅一样,您有一个托盘系统 - 一个人可以挑选一个托盘,将其放在导轨上,然后访问每个食品站,直到到达收银台。现在,如果你想象每个人都相继出轨 - 这就是 JavaScript 的单线程本质。然而,由于 JavaScript 也可以异步执行,那么我们需要将此应用到类比中......

因此,假设在这个美食大厅中,沿铁轨有 5 个食品站,我们集中关注到达铁轨起点的三个人:A 人(同步)、B 人(异步)和 C 人(同步) 。 A、B、C 仍按相同顺序经过 1 号食品站并到达 2 号食品站。现在,A 顺利通过食品站 2,但是 B 想要一些已经用完的东西,而厨师正在 cooking 。因此,B(异步)可以在那里等待,直到饭菜准备好。与此同时,C 拿到了他们的元素并超越了 B。A 和 C 现在继续沿着轨道前进,而 B 则继续等待他们的饭菜准备好。最后,B 取餐,并按照 A-C-B 的顺序到达收银台。

希望这说明了 JavaScript 如何使用单个线程(rail),以及当我们执行异步代码时,返回数据的顺序在执行结束时如何不同。

这个类比是否反射(reflect)了单线程、异步 JavaScript 的本质?

最佳答案

也许你可以像麦当劳在德国使用的系统一样来解释它。如果您的汉堡没有,并且需要几秒钟才能拿到,您会得到一个号码并拿走您已有的汉堡。当你的汉堡做好后,有人过来给你汉堡。从某种意义上说,这是一个回调,它为您提供了您请求的数据,现在您可以完成您的工作(咀嚼汉堡)

关于javascript - 如何用类比来解释 JavaScript 的单线程特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675642/

相关文章:

javascript - 当存在 constructor() 时调用异步函数

javascript - 为 bodyParser 发出带有 JSON 的问题

javascript - 如何制作 Canvas 的加载屏幕

javascript - Raphael.js 如何删除点击处理程序?

javascript - 在 node.js 回调函数中循环

python - 如何从同步例程通知异步例程?

javascript - 如何使用 jQuery 异步上传文件?

javascript - jQuery .done 未按预期返回

c# - 异步聊天服务器缓冲区问题

ios - 从 Swift 函数中的异步调用返回数据