事件队列和任务队列之间有什么区别吗?

时间:2019-03-04 14:38:54

标签: javascript events task-queue eventqueue

我对这两个名字有些困惑,彼此相同吗?

1 个答案:

答案 0 :(得分:1)

ECMAScript中没有“事件队列”,也没有“事件循环”和“任务队列”。

ES262规范仅说明:

  

8.4作业和作业队列

     

作业是一种抽象操作,当没有其他ECMAScript计算可运行时,它将启动ECMAScript计算   目前正在进行中。可以将作业抽象操作定义为接受任意一组作业参数。   仅当没有正在运行的执行上下文并且执行上下文堆栈位于以下位置时,才能启动作业的执行   空的。 PendingJob是对以后执行作业的请求

     

[...]

     

通过在作业队列中将包含以下内容的PendingJob记录排入队列,来请求将来执行作业   作业抽象操作名称和任何必要的参数值。

在ECMAScript中,只有两个Job队列,一个用于承诺解析,一个用于初始加载模块/代码,但是该规范允许显式定义更多队列。

ECMAScript本身并没有定义其他所有内容,而是由运行时实现或其他规范定义了


您正在谈论的“任务队列”就是一个例子:

它们是defined的网络浏览器,是针对浏览器特定事件的ES作业队列。该规范还创造了术语“事件循环”(也是一个通用术语)来描述清空作业队列的逻辑。

因此可能使用“事件队列”是因为

a)如果您说有一个“事件循环”清空了“一个事件队列”,它简化了多个作业队列的概念。

b)人们从不阅读规格。

c)该术语是创造出来的,从未指定。