笔记-第二十五章-Event Loop(自用)

87 阅读1分钟

Event Loop

js是单线程的,如果js变成了多线程的话会引发一个问题,在同一时间内操作DOM,一个删除一个增加。这样js就乱了不知道该干嘛了!所以js是单线程的。

随着HTML5的到来,js也支持了多线程webWorker但是也不允许操作DOM。

单线程意味着所有的任务都需要排队,后面的任务必须要等前面的任务执行完毕才能执行,如果前面的任务耗时过长,后面的任务就需要一直等。所以在js中出现了异步的概念。

同步任务

同步任务是放在执行栈中立即执行的,代码的执行顺序依次从上到下执行。

异步任务

异步任务会被放到任务队列里边,等待同步任务都执行完了再依次进入执行栈开始执行。

宏任务

常见的宏任务包括:整个script、setTimeout、setInterval、UI交互事件、postMessage、Ajax

微任务

Promise.then、Promsie.catch、Promise.finally、process.nextTick(node环境下)。

运行机制

所有的同步任务都是在主进程执行的形成一个执行栈。主线程之外还存在一个“任务队列”,异步任务先进入任务队列进行等待,等待主线程中的所有同步任务执行完毕后,看看本次任务队列中是否有“微任务”,有的话将本次的微任务依次执行完毕,都执行完后再看看有没有下一轮宏任务,有的话执行下一轮宏任务,然后执行宏任务内的同步任务--->微任务--->下一次宏任务......