一个事件循环可以有多个任务队列。
同一个任务队列中的任务先进先出。
多个任务队列的任务可能交叉执行。
(1)HTML5规范
6.1.4 Event loops
http://www.w3.org/TR/html5/webappapis.html#event-loops
它指出,一个浏览器环境(unit of related similar-origin browsing contexts.)只能有一个事件循环(Event loop),而一个事件循环可以多个任务队列(Task queue),每个任务都有一个任务源(Task source)。
相同任务源的任务,只能放到一个任务队列中。
不同任务源的任务,可以放到不同任务队列中。
(同一个任务队列,能否容纳不同任务源的任务,没说)
又举了一个例子说,客户端可能实现了一个包含鼠标键盘事件的任务队列,还有其他的任务队列,而给鼠标键盘事件的任务队列更高优先级,例如75%的可能性执行它。这样就能保证流畅的交互性,而且别的任务也能执行到了。但是,同一个任务队列中的任务必须按先进先出的顺序执行。
(2)EcmaScript 2015规范
76页 8.4 Jobs and Job Queues
它指出,任务队列(Job queue)是一个先进先出的队列,每一个任务队列是有名字的,至于有多少个任务队列,取决于实现。每一个实现至少应该包含以上两个任务队列。
以下又强调了,单独的任务队列中的任务总是按先进先出的顺序执行,但是不保证多个任务队列中的任务优先级,具体实现可能会交叉执行。
哪里用到这个任务队列了呢,Promise就用了,492页。
<u></u>Promise.then
会把一个任务放到名为“PromiseJobs”的任务队列中。
网友评论