JavaScript之EventLoop事件循环

EventLoop事件循环

参考链接
Tasks, microtasks, queues and schedules

微任务、宏任务与Event-Loop

执行顺序

  1. 进入任务执行栈
  2. 同步任务进入主线程执行, 异步任务进入事件队列
  3. 同步任务执行完成后调取任务队列中的任务进入主线程执行
  4. 执行完成再次调取任务队列, 直到没有任务, 退出


    EventLoop1.png

    EventLoop.png
  • Pending i/o callbacks
    执行io, 文件操作,网络操作等
  • Idle, prepare
    内部操作
  • Poll
    轮循I/O操作,看是否有I/O的callback,如果没有这会阻塞线程(有超时和基本检测)一段时间
    *check
    只处理setImmediate的回调函数
    *closeCallback
    专门处理一些close类型的回调,如关闭网络链接等

注意

  1. 异步任务要等主线程中的同步任务执行完之后才会执行, 如果主线程有耗时比较久的任务, 异步任务执行定时器什么的会有偏差
  2. 任务分为 宏任务和微任务

宏任务微任务

  1. 宏任务
  • 主体script, setTimeout, setInterval
  1. 微任务
  • Promise.then, process.nextTick

Promise()属于宏任务, then()及catch 属于微任务

eventloop宏任务微任务.png

你可能感兴趣的:(JavaScript之EventLoop事件循环)