| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> nodejs--事件环、宏任务和微任务 -> 正文阅读 |
|
[JavaScript知识库]nodejs--事件环、宏任务和微任务 |
目录 ? ? 一、事件环1.1 初识事件环和浏览器中一样NodeJS中也有事件环(Event?Loop),但是由于执行代码的宿主环境和应用场景不同,所以两者的事件环也有所不同 1.2 NodeJS事件环和浏览器事件环区别任务队列个数不同: 浏览器事件环有2个事件队列(宏任务队列和微任务队列) NodeJS事件环有6个事件队列 微任务队列不同,
微任务执行时机不同,
微任务优先级不同,
示例:
1.3 NodeJS中的任务队列????┌───────────────────────┐ ┌>?│timers??????????│执行setTimeout()?和?setInterval()中到期的callback │??└──────────┬────────────┘ │??┌──────────┴────────────┐ │??│pending?callbacks│执行系统操作的回调,?如:tcp,?udp通信的错误callback │??└──────────┬────────────┘ │??┌──────────┴────────────┐ │??│idle,?prepare???│只在内部使用 │??└──────────┬────────────┘ │??┌──────────┴────────────┐ │??│poll????????????│执行与I/O相关的回调 ????│??????????????????(除了close回调、定时器回调和setImmediate()之外,几乎所有回调都执行); │??└──────────┬────────────┘ │??┌──────────┴────────────┐ │??│check???????????│执行setImmediate的callback │??└──────────┬────────────┘ │??┌──────────┴────────────┐ └─┤close?callbacks?│执行close事件的callback,例如socket.on("close",func) ????└───────────────────────┘
????┌───────────────────────┐ ┌>?│timers??????????│执行setTimeout()?和?setInterval()中到期的callback │??└──────────┬────────────┘ │??┌──────────┴────────────┐ │??│poll????????????│执行与I/O相关的回调 ????│??????????????????(除了close回调、定时器回调和setImmediate()之外,几乎所有回调都执行); │??└──────────┬────────────┘ │??┌──────────┴────────────┐ └─┤check???????????│执行setImmediate的callback ????└───────────────────────┘ 注意点:
什么时候切换队列? 当队列为空(已经执行完毕或者没有满足条件回到) 或者执行的回调函数数量到达系统设定的阈值时任务队列就会切换 注意点: 在NodeJS中process.nextTick微任务的优先级高于Promise.resolve微任务 ????????????┌───────────────────────┐ ????????????│????????????????同步代码 ????????????└──────────┬────────────┘ ??????????????????????????????????│ ??????????????????????????????????│?<----?满足条件微任务代码 ??????????????????????????????????│ ????????????┌──────────┴────────────┐ ????????┌>?│timers??????????│执行setTimeout()?和?setInterval()中到期的callback ????????│??└──────────┬────────────┘ ????????│????????????????????????│ ????????│????????????????????????│?<----?满足条件微任务代码 ????????│????????????????????????│ ????????│??┌──────────┴────────────┐ ????????│??│poll????????????│执行与I/O相关的回调 ????????│??│??????????????????(除了close回调、定时器回调和setImmediate()之外,几乎所有回调都执行); ????????│??└──────────┬────────────┘ ????????│????????????????????????│ ????????│????????????????????????│?<----?满足条件微任务代码 ????????│????????????????????????│ ????????│??┌──────────┴────────────┐ ????????└─┤check???????????│执行setImmediate的callback ????????????└───────────────────────┘ 示例 :
执行流程, 注意点:
示例,
执行流程: 1.4 其他注意点:?如下代码输出的结果是随机的 ????????在NodeJS中指定的延迟时间是有一定的误差的,?所以导致了输出结果随机的问题
二、宏任务和微任务2.1 初识宏任务和微任务? JS是单线程的:JS中的代码都是串行的,?前面没有执行完毕后面不能执行 执行顺序:
2.2 宏任务和微任务在JS的异步代码中又区分"宏任务(MacroTask)"和"微任务(MicroTask)" 宏任务(MacroTask):?宏/大的意思,?可以理解为比较费时比较慢的任务 微任务(MicroTask):?微/小的意思,?可以理解为相对没那么费时没那么慢的任务 2.3 常见的宏任务和微任务i.宏任务 (MacroTask): setTimeout,?setInterval,?setImmediate(IE独有)... setlmmediate的基本用法:
setImmediate和setTimeout,?setInterval区别: setImmediate不能设置延迟时间,?并且只能执行一次;IE独有,也就是只能IE浏览器里才能生效 ii. 微任务(MicroTask): Promise,?MutationObserver?,process.nextTick(node独有)?... MutationObserver的基本用法: MutationObserver是专门用于监听节点的变化
2.4 注意点:
完整执行顺序:
示例1,
执行流程: 注意点: 每执行完一个宏任务都会立刻检查微任务队列有没有被清空,?如果没有就立刻清空 示例2,
执行流程: 示例3,
执行流程: |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:03:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |