博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中Nodejs中事件循环和js 事件循环差异
阅读量:3512 次
发布时间:2019-05-20

本文共 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/

你可能感兴趣的文章
SpringBoot入门(二)场景启动器
查看>>
SpringBoot入门--自动配置
查看>>
springboot读取配置文件 例:读取配置文件的优先顺序;在主配置文件中激活其他配置文件;加载非主配置文件
查看>>
自动配置原理
查看>>
TCP协议
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
redis 持久化详解,RDB和AOF是什么?他们优缺点是什么?运行流程是什么?
查看>>
spring注解版(一)
查看>>
SpringBoot中访问控制层(controller)得不到Json数据
查看>>
react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
查看>>
BFC(Block Formatting Context)
查看>>
什么是作用域,什么是闭包,什么是作用域链
查看>>
惰性求值,面向对象
查看>>
lodash源码分析之baseSlice()函数
查看>>
数据结构之列表
查看>>
发布/订阅模式 vs 观察者模式
查看>>
es5中的arguments对象
查看>>
git本地仓库和远程仓库关联,分支重命名
查看>>
js对象的深拷贝,你真的觉得很简单吗?
查看>>
你真的了解map方法吗?手动实现数组map方法。
查看>>