JS解析引擎和异步请求

225 阅读1分钟

JS解析引擎和异步请求


js解析引擎是单线程的,浏览器和Node是多线程的。可以这么理解线程,单线程就是一个人在干活,多线程就是很多人在干活,很显然,浏览器中有很多引擎,很多引擎就是有很多人在干活,就是多线程。

上图js引擎在解析任务栈,解析到任务中有异步操作的就交给宿主环境开启子进程来完成异步操作。js引擎本身是完成不了异步操作的。

js引擎解析任务栈和宿主环境子进程完成异步操作是在一个时间进行的。js引擎解析任务栈,按顺序依次解析任务show-->foo-->zoo-->eoo 任务show有异步操作就交给宿主环境,然后继续解析下一个任务foo,foo有异步操作就在交给宿主环境,然后继续解析zoo。直至任务栈解析完成。

在宿主环境 子进程 执行的异步操作完成后形成的 回调函数,就先放在异步回调函数的队列中排队。等待js引擎解析任务栈全部完成后 ,js引擎在通过 Loop循环从 回调函数队列中,取回调函数放到 js 主线程的执行栈中依次执行