为何事件循环(Event Loop)会拥有一个或多个任务队列?
关于事件循环与任务队列的理解
事件循环(Event Loop)拥有一个或多个任务队列(Task Queue)。
根据规范后续内容:
任务(Task)封装了负责如下工作的算法:
- 事件(Events):……
- 解析(Parsing):……
- 回调(Callbacks):……
- 资源使用:……
- 响应DOM操作:……
从形式上讲,任务(Task)是一个包含以下内容的结构体:
- 步骤(Steps):……
- 源(Source):……
你的理解是正确的,每个事件循环确实会维护一个或多个任务队列,各类操作(比如Events、Callbacks等)对应的任务会被放入关联的任务队列中。
可以参考下面的示意图:
规范里进一步明确了任务源与任务队列的关联规则:
根据任务的源字段,每个任务都来自特定的任务源(task source)。对于每个事件循环,每个任务源必须与一个特定的任务队列相关联。
举个实际的实现例子:
用户代理(user agent)可以为鼠标和键盘事件单独设置一个任务队列(关联用户交互任务源),另一个任务队列关联所有其他任务源。借助事件循环处理模型初始步骤赋予的灵活性,它可以在四分之三的时间内优先处理键盘和鼠标事件,既保证界面响应性,又不会导致其他任务队列被饿死。请注意,在此设置下,处理模型仍会强制用户代理不会乱序处理来自同一任务源的事件。
对应的示意图:
内容的提问来源于stack exchange,提问作者OnlyWick
相关产品推荐
相关产品推荐

