37.JavaScript 异步编程原理

书诚小驿2025/02/25前端面经Javascript

JavaScript 异步编程原理

(1)JavaScript 引擎负责解析,执行 JavaScript 代码,但它并不能单独运行,通常都得 有一个宿主环境,一般如浏览器或 Node 服务器,前文说到的单线程是指在这些宿主环 境创建单一线程,提供一种机制,调用 JavaScript 引擎完成多个 JavaScript 代码块的调 度,这种机制就称为事件循环( Event Loop )。 (2)关于事件循环流程分解如下: •宿主环境为 JavaScript 创建线程时,会创建堆 (heap) 和栈 (stack) ,堆内存储 JavaScript 对象,栈内存储执行上下文; •栈内执行上下文的同步任务按序执行,执行完即退栈,而当异步任务执行时,该异步任务 进入等待状态(不入栈),同时通知线程:当触发该事件时(或该异步操作响应返回时), 需向消息队列插入一个事件消息; •当事件触发或响应返回时,线程向消息队列插入该事件消息(包含事件及回调); •当栈内同步任务执行完毕后,线程从消息队列取出一个事件消息,其对应异步任务(函 数)入栈,执行回调函数,如果未绑定回调,这个消息会被丢弃,执行完任务后退栈; •当线程空闲(即执行栈清空)时继续拉取消息队列下一轮消息(next tick ,事件循环流 转一次称为一次 tick )。

最后更新时间' 2025/2/26 01:16:20