回调队列和事件队列有什么区别?

Ara*_*chi 6 javascript asynchronous callback event-loop dom-events

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

图1 -

在此输入图像描述

图2-

在此输入图像描述

Kai*_*ido 5

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

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

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

另请注意,事件循环的一部分是由事件循环直接调用回调和触发事件,而不是从任务:更新渲染
在那里你会发现回调和各种事件(滚动、调整大小、媒体查询等)的映射,这些事件作为事件循环中这个特殊位置的一部分被调用,它本身只偶尔被调用一次(通常当显示器发送垂直同步信号)。