【Node.js】 事件循环机制

目录

      • 事件循环机制
      • 回调

事件循环机制

事件循环机制(Event Loop)
JavaScript为单线程,怎样处理任务

  1. 处理安排好的任务,按照顺序写进主线程里,等线程执行时,这些任务就是 按照顺序在线程中依次被执行;等所有任务执行完成之后,线程会自动退出。
  2. 处理线程中产生的新任务,运用事件循环机制
    引入循环机制,在线程语句后面添加了一个 for 循环语句,让线程会一直循环执行。
    引入事件,在线程运行过程中,等待用户的操作事件,等待过程中线程处于暂停状态,等接收到用户的操作之后再激活线程,然后继续执行。
  3. 处理其他线程发送过来的任务,运用消息队列
    消息队列:一种数据结构,存放要执行的任务,队列先进先出
  • 在线程之间添加一个消息队列
  • 其他线程产生新任务添加进消息队列尾部
  • 主线程循环地从消息队列头部读取任务
  1. 处理其他进程发送过来的任务
    渲染进程专门有一个 IO 线程 用来接收其他进程传进来的消息,接收到消息之后,会将这些消息组装成任务发送给渲染主线程。
  2. 处理高优先级的任务,运用微任务
    宏任务 macrotask / jobs:消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列,在执行宏任务的过程中,如果 DOM 有变化,那么就会将该变化添加到微任务列表中,这样就不会影响到宏任务的继续执行,因此也就解决了 执行效率 的问题。
    微任务 microtask / task:等宏任务中的主要功能都直接完成之后,这时候,渲染引擎并不着急去执行下一个宏任务,而是 执行当前宏任务中的微任务,因为 DOM 变化的事件都保存在这些微任务队列中,这样也就解决了 实时性问题。微任务和宏任务是绑定的,每个宏任务在执行时,会创建自己的微任务队列
  3. 单个任务执行时间过长,运用回调功能
    因为所有的任务都是在单线程中执行的,所以 每次只能执行一个任务,而其他任务就都处于等待状态。如果其中一个任务执行时间过久,那么下一个任务就要等待很长时间。
    针对这种情况,JavaScript 是通过 回调功能 来规避这种问题的,也就是让要执行的 JavaScript 任务滞后执行。
  • 微任务包括 process.nextTickpromiseMutationObserver,其中 process.nextTick 为 Node.js 独有。
  • 宏任务包括

你可能感兴趣的:(前端,node.js,javascript,ui)