首页 > 解决方案 > 回调队列和事件队列有什么区别?

问题描述

在一些关于 JavaScript 异步行为的在线资源中,还提到了浏览器架构、调用堆栈、事件循环和事件队列等概念。在描述浏览器事件循环的工作原理时,有些使用事件队列,有些使用回调队列。我对这些术语感到困惑,想知道它们是指浏览器中使用的相同队列数据结构,还是它们不同并用于处理不同的场景?

图1 -

在此处输入图像描述

图 2 -

在此处输入图像描述

标签: javascriptasynchronouscallbackdom-eventsevent-loop

解决方案


在 HTML 的命名法(定义浏览器的事件循环)中,两者都不正确。

我们拥有的是“任务源”,它们都可能映射到不同的任务队列
事件循环处理开始时,用户代理将选择从哪个任务队列中执行下一个任务。该任务本身可能触发事件,或调用回调

这些任务通过各种方式排队,或者作为其他任务的一部分(例如,在任务开始并行工作后,当并行工作完成时,它会要求将任务排队),或者直接来自 IPC 消息(例如,用户发起的事件)。

另请注意,事件循环的一部分调用回调并由事件循环直接触发事件,而不是来自任务:更新呈现
在那里,您会找到回调和各种事件(滚动、调整大小、媒体查询等)的映射,这些事件在事件循环中作为这个特殊位置的一部分被调用,它本身仅在一段时间内被调用一次(通常在监视器发送一个垂直同步信号)。


推荐阅读