本文共 678 字,大约阅读时间需要 2 分钟。
Node.js采用V8作为js的解析引擎,而I/O处理方面使用了自己设计的libuv,libuv是一个基于事件驱动的跨平台抽象层,封装了不同操作系统一些底层特性,对外提供统一的API,事件循环机制也是它里面的实现。
JavaScript中事件循环,主要就在理解宏任务和微任务这两种异步任务。
宏任务(macrotask):
setTimeOut 、 setInterval 、 setImmediate 、 I/O 、 各种callback、 UI渲染 、messageChannel等优先级:主代码块 > setImmediate > postMessage > setTimeOut/setInterval
微任务(microtask):
process.nextTick 、Promise 、MutationObserver 、async(实质上也是promise)优先级:process.nextTick > Promise > MutationOberser
Nodejs中事件循环和js 事件循环差异
1. Node.js 的事件循环分为6个阶段
2. 浏览器和Node 环境下,microtask 任务队列的执行时机不同
3. Node.js中,microtask 在事件循环的各个阶段之间执行
4. 浏览器端,microtask 在事件循环的 macrotask 执行完之后执行
5. 递归的调用process.nextTick()会导致I/O starving,官方推荐使用setImmediate()
了解更多技术知识欢迎关注小编!
转载地址:http://axgmj.baihongyu.com/