3、如何理解 JS 的单线程?

前置知识:JS 为什么是单线程? - 掘金

用比喻的方式来理解单线程
假设将网页的渲染与交互比喻为一家餐馆的运转,那 JS 就是餐馆唯一的服务员。

为了实现餐馆的运转,该服务员需要做的事:迎客、点餐、上菜、收钱、送客、擦桌等。

单线程限制该服务员只能一件件做事:迎客=>点餐=>上菜=>收钱=>送客=>擦桌,做完后再开始下一桌。

单线程的问题
通过比喻方式描述了单线程,那其中的问题一眼也能看到,存在不必要的等待。
比如客人选座很慢、客人点餐磨叽、餐馆上菜很慢、客人全给零钱等等,这些情况会非常耽误服务员的时间。

异步的诞生
为了解决上述问题,可以将客人选座、客人点餐、餐馆上菜等一些事情弄成不需要等待的,让服务员先干别的事,只需要完成后叫一声服务员,然后服务员再做完手头的事情后立马来处理。
这就是异步

来个完整版的栗子:
来了一波客人 A,服务员热情接待,让客人 A 先选座,客人 A 选座期间,来了一波客人 B 服务员去接待,然后客人 A 大喊一声:“我选好了座位了”,服务员听到后说:“稍等,马上就来”,引导完客人 B 选座后,来到客人 A 再引导点餐,客人 A 点餐时,再迎接下一波客人或回应客人 B,然后……
这样服务员的等待时间减少了,变得勤快且能干~


3、如何理解 JS 的单线程?
https://mrhzq.github.io/职业上一二事/前端面试/每日知识卡片/3、如何理解 JS 的单线程?/
作者
黄智强
发布于
2024年2月3日
许可协议