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>

 

posted @ 2022-05-02 18:55  苹果π  阅读(107)  评论(0编辑  收藏  举报