11:事件循环
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>事件循环</title> </head> <body> <script> let a = `执行宏任务,然后执行该宏任务产生的微任务,若微任务在执行过程中产生了新的微任务,则继续执行微任务,微任务执行完毕后,再回到宏任务中进行下一轮循环`; let b = `await 后边如果跟一个常量的话,会直接执行,await下一行的代码会形成一个微任务,也就是把await 后边的作为一个微任务执行;`; let c = `await 后边如果跟一个异步函数的调用,那异步函数会放在本次循环的最后执行`; let d = `整体代码;setTimeout;setInterval;setImmediate;I/O;UI render`; let e = `process.nextTick;promise;async/await;mutationObserver`; let f = `node中`; let g = `process.nextTick 与普通微任务有区别,在微任务队列执行之前执行`; let h = `定时器检测阶段 timers 本阶段执行 timer 的回调,即setTimeout setInterval 里面的回调函数`; let i = `I\O 事件回调阶段 I\O callbacks 执行延迟到下一个循环执行的I\O回调,即上一轮循环中位被执行的一些I/O回调`; let j = `闲置阶段 仅系统内部使用`; let k = `轮询阶段 poll 检索新的I/O事件,执行与I/O相关的回调,其余情况node将在适当的时候再次阻塞`; let l = `检查阶段 check setImmediate函数在这里执行`; let m = `关闭事件回调阶段 close callback 一些关闭的回调函数 浏览器中的微任务是在每个相应的宏任务中执行的,而nodejs中的微任务是在不同阶段之间执行的 如果是 node11 版本一旦执行一个阶段里的一个宏任务(setTimeout,setInterval和setImmediate)就立刻执行对应的微任务队列`; let aa = `事件循环机制用于管理异步api的回调函数什么时候回到主线程中执行;nodejs采用的是异步执行模型,同步api在主线程中执行, 异步api在底层的c++维护的线程中执行,异步api的回调函数在主线程中执行; 因为nodejs是事件驱动的,事件驱动就是当什么时候做什么事情,做的事情就定义在回调函数中,可以将异步api的回调函数理解为事件处理函数, 所以管理异步api回调函数什么时候回到主线程中调用的机制就是事件循环机制 timer I/O perare poll check closing callback `; </script> </body> </html>