2020-01-20

个人Event loop学习记录

1:Event loop 是啥?

就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"。

2:任务类型

所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。

同步任务

在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;

异步任务

不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

任务还可以分为宏任务和微任务

宏任务:

macrotask 可以理解是每次执行栈执行的代码就是一个宏任务
(包括每次从事件队列中获取一个事件回调并放到执行栈中执行,每一个宏任务会从头到尾将这个任务执行完毕,不会执行其它)

setTimeout
setInterval
setImmediate (Node独有)
requestAnimationFrame (浏览器独有)
I/O
UI rendering (浏览器独有)

微任务:

可以理解是在当前 task 执行结束后立即执行的任务
如:

process.nextTick (Node独有)
Promise.then
Object.observe
MutationObserver

一个例子为:

console.log(1);

setTimeout(() => {
  console.log(2);
  Promise.resolve().then(() => {
    console.log(3)
  });
});

new Promise((resolve, reject) => {
  console.log(4)
  resolve(5)
}).then((data) => {
  console.log(data);
})

setTimeout(() => {
  console.log(6);
})

console.log(7);

输出为:1,4,7,5,2,3,6

你可能感兴趣的:(2020-01-20)