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

时间:2021-05-16 07:26:57

标签: javascript asynchronous callback dom-events event-loop

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

图 1 -

enter image description here

图 2 -

enter image description here

1 个答案:

答案 0 :(得分:1)

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

我们拥有的是 "task-sources",它们都可能映射到不同的 task-queues
event-loop processing 开始时,用户代理将选择从哪个任务队列中执行下一个 task。此任务本身可能fire events,或invoke callbacks

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

另请注意,事件循环的一部分是由事件循环直接调用回调和触发事件,而不是来自任务:Update the rendering
在那里你会发现一个 map of callbacks 和各种事件(滚动、调整大小、媒体查询等),它们作为事件循环中这个特殊位置的一部分被调用,它本身只偶尔被调用一次(通常当显示器发送 V-Sync 信号时)。

相关问题