浏览器和node.js的事件循环有什么区别?

浏览器和node.js的事件循环有什么区别?

  • 答案:

前置知识:单线程和异步

  • JS是单线程的(无论是浏览器还是node.js)
  • 浏览器中JS执行和DOM渲染共用一个线程(所以一次只能进行一件事,执行JS就不能执行DOM渲染,反之亦然)
  • 异步

前置知识:宏任务和微任务

  • 宏任务,如setTimeout、setInterval网络请求
  • 微任务,如promise async/await
  • 微任务在下一轮DOM渲染之前执行,宏任务在之后执行

微任务比宏任务要快
渲染:把HTML渲染到页面上,让页面显示出东西

node.js异步

  • Nodejs同样使用ES语法,也是单线程,也需要异步
  • 异步任务也分:宏任务+微任务
  • 但是,它的宏任务和微任务,分不同类型,有不同优先级

node.js宏任务类型和优先级

  • Timers - setTimeout setInterval
  • I/O callbacks - 处理网络、流、TCP的错误回调
  • Idle, prepare - 闲置状态(nodejs内部使用)
  • Poll轮询 - 执行Poll中的I/O队列
  • Check检查-存储setImmediate回调
  • Close callbacks - 关闭回调,如socket.on(‘close’)

宏任务的执行顺序:

浏览器和node.js的事件循环有什么区别?_第1张图片

node.js微任务类型和优先级

  • 包括:promise、async/await , process.nextTick
  • 注意, process.nextTick优先级最高

nodejs event loop

  • 执行同步代码
  • 执行微任务(process.nextTick优先级最高)
  • 按顺序执行6个类型的宏任务(每个结束时都执行当前的微任务)

答案:

  • 浏览器和nodejs的event loop流程基本相同
  • nodejs宏任务和微任务分类型,有优先级
  • 浏览器中宏任务和微任务没有类型和优先级,谁在前就先谁

注意事项

  • 推荐使用setImmediate代替process.nextTick

你可能感兴趣的:(node.js,node.js,javascript,开发语言)