事件循环机制(浏览器和nodejs)

事件循环机制在两种环境下是不同的,我们来简单讲讲

浏览器端

首先浏览器会把主任务队列(同步任务)中的同步任务挨个全部执行完,

然后再去等待任务队列(异步任务)中看哪个任务可以执行了,

然后把该执行的任务放到主任务队列中去执行,

等这个任务执行完,再去等待任务中看谁可以执行了,再把这个任务放到主任务队列中执行... 如此循环。这种循环叫做事件循环(Event Loop)

宏任务和微任务

宏任务和微任务是等待任务队列中的异步任务的处理机制;(JS执行有同步任务队列和等待任务队列)

主任务队列存储的都是同步任务;等待任务队列存储的都是异步任务;

异步任务都是谁先到达条件谁先执行,微任务的优先级比宏任务的要高;

哪些是宏任务:

\1. 定时器(setInterval和setTimeout)

\2. DOM事件回调

\3. ajax回调 ajax达到执行条件就会立即执行

哪些是微任务:

\1. Promise的then的回调函数

\2. async 函数await下面的代码;

\3.MutationObserver的回调

\4. process.nextTick

nodejs

\1. timers 阶段: 这个阶段执行 setTimeout(callback)setInterval(callback) 预定的 callback;

\2. I/O callbacks 阶段: 此阶段执行某些系统操作的回调,例如TCP错误的类型。 例如,如果TCP套接字在尝试连接时收到 ECONNREFUSED,则某些* nix系统希望等待报告错误。 这将操作将等待在==I/O回调阶段==执行;

\3. idle, prepare 阶段: 仅node内部使用;

\4. poll 阶段: 获取新的I/O事件, 例如操作读取文件等等,适当的条件下node将阻塞在这里;

\5. check 阶段: 执行 setImmediate() 设定的callbacks;

\6. close callbacks 阶段: 比如 socket.on(‘close’, callback) 的callback会在这个阶段执行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值