JS引擎和event loop的关系?

当JS引擎中执行栈的代码执行完以后,是如何通过event loop去获取事件队列的的任务的?

JS引擎主动去事件队列获取?还是event loop将任务压到执行栈,event loop怎么知道栈的代码已经执行完了?

阅读 2.8k
2 个回答

javascript引擎的只是一个按需执行 JavaScript 任意代码片段的环境。

javascript引擎是运行在宿主环境中的(比如浏览器),提供事件循环机制的,不是javascript引擎,而是宿主环境。

换句话说,宿主环境提供了一种机制来处理程序中多个块的执行,在执行每个程序块的时候,调用javascript引擎,因此事件的调度也是有宿主环境进行的。

JS引擎用于解释和执行JS代码,主要包括调用栈和内存堆,Event loop从事件队列中取出Message,每一个Message都关联一个函数,这个函数会被推送到JS引擎的调用栈中执行。Event loop是独立于JS引擎的,它负责循环事件队列并发送回调函数给JS引擎。Event loop和JS引擎可以通信,比如通过宿主环境,所以Event loop可以知道调用栈中的函数是否执行完成(具体通信方式没有研究过)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题